奇怪的展开式
内存限制: 256 Mb时间限制: 1000 ms
题目描述
小明刚学会了进制转换,他想到了一个有趣的写法。
对于一个 m进制的数 n,比如 (10101)2,它可以写成这样的十进制展开式:
1×24+0×23+1×22+0×21+1×20
小明觉得这个式子写出来很好看,但他不想看到系数为 0 的项,因为那样太啰嗦了。
现在给定一个 m 进制数 n,请你帮小明写出它的十进制展开式,并且把系数为 0的项都省略掉。
输入格式
输入一行两个整数 m 和 n,中间用空格隔开。m 表示进制,n 是该进制下的一个数。
输出格式
输出一行,为省略了系数为 0 的项之后的十进制展开式。
数据范围
对于 100% 的数据,1<m<10,n≥1且 n 的位数不超过 1000。
样例数据
输入:
6 11400514
输出:
1*6^7+1*6^6+4*6^5+5*6^2+1*6^1+4*6^0
题解:这个题目很简单,直接定义一个字符串m,输入字符串存储到m里面,计算长度后,从高位到低位逐个判断是否为0,非0的话直接输出。
代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
int m;
string n;
cin >> m >> n;
int len = n.length();
bool first = true; // 控制是否输出 '+'
for (int i = 0; i < len; i++) {
int digit = n[i] - '0';
if (digit == 0) continue; // 跳过系数为0的项
if (!first) {
cout << "+";
}
first = false;
int power = len - 1 - i;
cout << digit << "*" << m << "^" << power;
}
return 0;
}

1万+

被折叠的 条评论
为什么被折叠?



