将a进制转换为十进制数n
对于d进制数
a
1
a
2
.
.
.
a
n
a_1 a_2 ... a_n
a1a2...an其转成十进制
n
=
a
1
∗
d
n
−
1
+
a
2
∗
d
n
−
2
+
.
.
.
+
a
n
∗
d
0
n = a_1 *d ^{n -1} + a_2 * d^{n - 2} + ... + a_n * d^0
n=a1∗dn−1+a2∗dn−2+...+an∗d0
所以有以下代码:
int d = 2; //假设为2进制
int n, k = 1;
while(x != 0) {
n = n + (x % 10) * k;
x /= 10;
k *= d;
}
将十进制转为d进制
十进制转为d进制,即用十进制数n除d取余,最后余数排列从后往前
如11转2进制
除数 | 余数 | |
---|---|---|
11 | 5 | 1 |
5 | 2 | 1 |
2 | 1 | 0 |
1 | 0 | 1 |
所以最终转换为2进制1011
//其中n为d进制数,d为进制
int c[32], index = 0;
do {
c[index++] = n % d;
n /= d;
} while (n != 0);
PAT乙级1022
因为所给数据小于 2 30 − 1 2^{30} -1 230−1所以不用考虑溢出
#include<iostream>
const int maxn = 32;
int num[maxn] = { 0 };
int main() {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
int temp = a + b;
int n = 0;
do {
num[n++] = temp % c;
temp /= c;
} while (temp != 0);;
for (int i = n - 1; i >= 0; --i)
printf("%d", num[i]);
return 0;
}