进制转换
题目背景
无
题目描述
今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 :
1*24+0*23+1*22+0*21+1*2^0,
那么请你编程实现,将一个M进制的数N转换成十进制表示的式子。
注意:当系数为0时,该单项式要省略。
输入格式
两个数,M和N,中间用空格隔开。
输出格式
共一行,一个十进制表示的式子。
样例 #1
样例输入 #1
2 10101
样例输出 #1
1*2^4+1*2^2+1*2^0
提示
对于100%的数据,1<M<10,N的位数不超过1000。
思路
首先,从输入中读取一个整数m和一个字符串s。
代码中的变量i被初始化为字符串s的长度减1,这是因为在多项式中,最高位的指数是长度减1。接着,它设置一个标志变量flg,用于判断是否是第一个非零的字符,以决定是否需要输出一个加号。
然后,程序开始遍历字符串s中的每个字符。对于每个字符,如果它不是’0’,那么就输出这个字符和它的指数。这个指数是字符在字符串中的位置,从右到左,从0开始。如果这不是第一个非零的字符,那么在输出字符和它的指数之前,还会输出一个加号。
输出的格式是printf("%c*%d^%d", *it, m, i);
,其中%c
是字符,*
是乘号,%d
是整数,^
是指数符号。在每次遍历后,i都会减1,因为我们是从字符串的末尾向前遍历。
AC代码
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
int main() {
int m;
string s;
cin >> m >> s;
int i = s.size() - 1;
bool flg = 0;
for (auto it = s.begin(); it != s.end(); it++) {
if (*it != '0') {
if (!flg) {
flg = 1;
} else {
putchar('+');
}
printf("%c*%d^%d", *it, m, i);
}
i--;
}
return 0;
}