3.5 进制转换
3.5 进制转换
http://codeup.cn/contest.php?cid=100000579
B 数制转换

代码
#include <cstdio>
#include <cstring>
int a_to_ten(int a, char *x) { //a进制x转换为十进制y
int y = 0, temp, product = 1;
for (int i = strlen(x) - 1; i >= 0; i--) {
if (x[i] >= 'a') x[i] -= 32;
temp = x[i] >= 'A' ? x[i] - 'A' + 10 : x[i] - '0'; //取得x末位的字符表示的数字
y += temp * product;
product *= a;
}
return y;
}
int ten_to_b(int b, int y, char *z) { //十进制y转换为b进制数z 返回z的位数,方便倒序输出
int num = 0, temp;
do {
temp = y % b;
if (temp <= 9) z[num++] = temp + '0';
else z[num++] = temp - 10 + 'A';
y /= b;
} while (y != 0);
return num;
}
int main() {
char x[40], z[40];
int y, a, b;
while (scanf("%d %s %d", &a, x, &b) != EOF) {
y = a_to_ten(a, x);
int num = ten_to_b(b, y, z);
for (int i = num - 1; i >= 0; i--) {
printf("%c", z[i]);
}
printf("\n");
}
return 0;
}
C 进制转换

题目解析
将大数放入char数组,每次末位字符除2取余后,将char数组除2。
具体除2过程:
从高到低每位除2,若此位为奇数则要给后一位+10,若此位位偶数则后一位不加(自己思考一下数字除2的过程)
代码
#include <cstdio>
#include <cstring>
int main() {
char ten[35], two[200];
while (scanf("%s", ten) != EOF) {
int num = 0;
int i = 0, jinwei, len = strlen(ten);
for (int i = 0; i < len; i++) {
ten[i] -= '0';
}
do {
two[num++] = ten[len - 1] % 2 + '0'; //每次取最后一位的余数
jinwei = 0;
for (int j = i; j < len; j++) {
int temp = ten[j];
ten[j] = (ten[j] + jinwei) / 2;
if (temp & 1) jinwei = 10; //若是奇数,则下一位+10
else jinwei = 0; //若是偶数,则加一位+0
}
if (ten[i] == 0) i++;
} while (i < len);
for (int i=num-1;i>=0;i--){
printf("%c",two[i]);
}
printf("\n");
}
return 0;
}
本文作者:Joey-Wang
本文链接:https://www.cnblogs.com/joey-wang/p/14541163.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步