思路:先把p进制数x转换为10进制数y,再利用辗转相除法把10进制数y转化为q进制数,用数组z存储q进制数的每一位。
#include<cstdio>
int main() {
//8进制数342转2进制
char str[20] = "342 8 2";
int x, p, q;
sscanf(str, "%d %d %d", &x, &p, &q);
//p进制转x10进制y
int product = 1, y = 0;
while(x) {
y += (x%10)*product;
product *= p;
x /= 10;
}
printf("%d\n", y);
//十进制数y转q进制数
int z[40], num = 0;
do {
z[num++] = y%q;
y /= q;
} while(y);
for(int i = num-1; i >= 0; i--) printf("%d", z[i]);
return 0;
}
题目描述
? 输入两个非负10进制整数A和B(<=2^30-1)以及D(进制数),输出A+B的D(1<D<=10)进制数。
输入格式:
? 在一行一次给出三个整数A、B和D。
输出格式:
? A+B的D进制数。
样例输入:
? 123 456 8
样例输出:
? 1103
思路:
? 先计算A+B的值,再十进制直接转D进制(辗转相除法)。
代码:
#include<cstdio>
int main() {
int a, b, d;
scanf("%d %d %d", &a, &b, &d);
int sum = a + b;
int z[40];
int num = 0;
//do while可以避免sum==0的冲突
do {
z[num++] = sum%d;
sum /= d;
} while(num);
for(int i = num-1; i >= 0; i--) printf("%d", z[i]);
return 0;
}
原文:https://www.cnblogs.com/kindleheart/p/13302261.html