题目要求
输入一个十进制数N,将它转换成R进制数输出。
输入
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
输出
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
IO 实例
输入:74921 16
输出:124A9
输入:167480 9
输出:274658
输入:-2437443 11
输出:-1415318
输入:-2325324 15
输出:-30DEB9
输入:143 16
输出:8F
输入:^z(ctrl+z)
输出:Process finished with exit code 0
AC 代码
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
char ch[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
string iop(int m, int n) {
char s[1000] = {0};
char ans[1000] = {0};
int flag = 0;
int i = 0, j = 0;
if (m < 0) {
m = -m;
flag = 1;
};
while (1) {
s[i++] = ch[m % n];
m /= n;
if (m == 0) {
break;
}
}
i--;
if (flag) {
ans[j++] = '-';
}
while (i >= 0) {
ans[j++] = s[i--];
}
return ans;
}
int main() {
int m, n;
while (cin >> m >> n) {
cout << iop(m, n) << endl;
}
return 0;
}
后话
为啥记这一个题呢,因为我发现string类型的函数返回值居然可以是char字符串?!有点东西。还有就是怕忘了咋做,留着以后看好了。
水题。