题目描述
把一个整数的各位累加,NowCoder称它为“数位和”。例如正整数123456的数位和是1+2+3+4+5+6=21。现在,请你帮忙计算一个整数n在r进制下的数位和,并用相应的进制输出结果。
输入描述:
输入有多组数据。
每组数据包含两个正整数n (1≤n≤2147483647)和r (2≤n≤16)。
输出描述:
对应每一组数据,输出十进制正整数n转换成r进制后的数位和,并用r进制输出结果。
输入例子:
123456 10
123456 2
输出例子:
21
110
我的C++代码:
#include<iostream>
#include<deque>
#include<cmath>
using namespace std;
deque<int> transArr(long long n, int r) {
deque<int> de;
int rsum = 0;
while (n > 0) {
de.push_front(n % r);
n /= r;
}
return de;
}
long long trans(deque<int> de) {
long long res = 0;
int len = de.size();
int p = 0;
for (int i = len - 1; i >= 0; i--) {
res += de[i] * pow(10, p++);
}
return res;
}
int fun(int n, int r) {
deque<int> de;
int rsum = 0;
de = transArr(n, r);
for (int i = 0; i < de.size(); i++) {
rsum += de[i];
}
rsum = trans(transArr(rsum, r));
return rsum;
}
int main() {
long long n;
int r, rsum;
while (cin >> n >> r) {
rsum = fun(n, r);
cout << rsum << endl;
}
}
自测结果:
提交结果:
自测结果和输出例子一样,为什么结果不通过?