P2084 进制转换
题目背景
无
题目描述
今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 :
1*2^4+0*2^3+1*2^2+0*2^1+1*2^0,
那么请你编程实现,将一个M进制的数N转换成十进制表示的式子。
注意:当系数为0时,该单项式要省略。
输入输出格式
输入格式:
两个数,M和N,中间用空格隔开。
输出格式:
共一行,一个十进制表示的式子。
输入输出样例
说明
对于100%的数据,1<M<10,N的位数不超过1000。
我没看到M<10,所以一不小心把任意进制转换的都写出来了(除了1)
代码如下:
#include<iostream>
#include<string>
using namespace std;
char *p = "*^+";
int ch(char n)
{
if (n >= '0'&&n <= '9')return n - '0';
else return n - 'A' + 10;
}
int main()
{
int num;
string nn;
cin >> num >> nn;
int len = nn.length();
int p = len - 1;
cout << ch(nn[0]) << "*" << num <<"^"<<p;
p--;
for (int i = 1; i < len; i++)
{
if (!ch(nn[i]) == 0)
{
cout << "+";
cout << ch(nn[i]) << "*" << num << "^" << p;
}
p--;
}
cout << endl;
return 0;
}
刚刚,开始是有错误的,比如输入 2 1000
则输出 1*2^3+ 则不需要后面的加号的。
因为我写的是只要不是最后一个数和非0,就在后面加+
后来,改变了判断条件变成了 1.第一个数字一定为非0,2.判断非0前面一定有“+”号
我cpy了一下,大佬的代码,结果发现比我复杂。