# 进制转换(洛谷p2084)
## 题目背景
无
## 题目描述
今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 :
1\*2^4+0\*2^3+1\*2^2+0\*2^1+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。
错误代码
#include"iostream"
using namespace std;
int main() {
int m,top=0,i=0, q[100000];
string str;
cin >> m;
cin >> str;
for (i = 0; str[i]!=NULL; i++) {
q[++top] == str[i];
}
for (int j = 0; top > 0;j++) {
if (q[top] != 0)
cout <<"+" << q[top--] << "*"<<m<<"^" << j;
}
}
错误原因:1.抬头会多一个加号。 2.输出的不是正常数字,是内存地址--->对字符串不熟悉
修正
#include"iostream"
using namespace std;
int main() {
int m;
string n;
cin >> m >> n;
bool flag = true;
for (int i = 0; i < n.size(); i++) {
if (n[i] != '0') {
if (flag != true)
cout << "+";
cout << n[i] << "*" << m << "^" << n.size() - i - 1;
flag = false;
}
}
return 0;
}
1.定义bool flag,来区分第一个和其他的,从而解决多出的加号
2.s.size()来获取字符串的长度。