2022.10.24这题的0输入输出却让我很艰难。最后就把函数题变编程题了。题目2-9,这个2-16,找的高中同学。
任务描述
本关任务:将十进制非负整数 n 转换成 base(2≤base≤9)进制数,并按位输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
编程要求
根据提示,在右侧编辑器补充完整void ten2other(int n, int base)的代码,将十进制非负整数 n 转换成 base(2≤base≤9)进制数,并按位输出。
测试说明
平台会对你编写的代码进行测试:
输入格式
输入两个参数。第一个为n,第二个为base。
输出格式
n转换为base进制的结果。
输入输出样例
输入1
6 4
输出1
12
输入2
10 2
输出2
1010
开始你的任务吧,祝你成功!
C++代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
char s[10005];
int main() {
int x,n;
//scanf("%d%d",&x ,&n);
while(cin>>x>>n) {
int count = 0;
if(x == 0) {
cout<<"0";
}
if(n < 10) {
int r;
if(x < 0) {
int x1 = abs(x);
while(x1 != 0) {
r = x1 % n;
s[count] = r + '0';
count++;
x1 /= n;
}
printf("-");
for(int i = count - 1 ; i >=0 ; i--) {
printf("%c",s[i]);
}
} else {
while(x != 0) {
r = x % n;
s[count] = r + '0';
count++;
x /= n;
}
for(int i = count - 1 ; i >=0 ; i--) {
printf("%c",s[i]);
}
}
} else {
int r;
if(x < 0) {
int x1 = abs(x);
while(x != 0) {
r = x % n;
if(r == 10) {
s[count] = 'A';
} else if(r == 11) {
s[count] = 'B';
} else if(r == 12) {
s[count] = 'C';
} else if(r == 13) {
s[count] = 'D';
} else if(r == 14) {
s[count] = 'E';
} else if(r == 15) {
s[count] = 'F';
} else {
s[count] = r + '0';
}
count++;
x /= n;
}
printf("-");
for(int i = count - 1 ; i >=0 ; i--) {
printf("%c",s[i]);
}
} else {
while(x != 0) {
r = x % n;
if(r == 10) {
s[count] = 'A';
} else if(r == 11) {
s[count] = 'B';
} else if(r == 12) {
s[count] = 'C';
} else if(r == 13) {
s[count] = 'D';
} else if(r == 14) {
s[count] = 'E';
} else if(r == 15) {
s[count] = 'F';
} else {
s[count] = r + '0';
}
count++;
x /= n;
}
for(int i = count - 1 ; i >=0 ; i--) {
printf("%c",s[i]);
}
}
}
cout<<endl;
}
return 0;
}