将一个p进制的数转换为q进制,需要两步:
1.将p进制数x转换为十进制数y
2.将十进制数y转换为Q进制数z
对于第一步,有公式
可以写出函数
int convertToDecimal(int a, int p)
{
int ans = 0, product = 1;
while (a)
{
ans = ans + (a % 10) * product;
a = a / 10;
product *= p;
}
return ans;
}
对于第二步,可以用短除法倒取余数求得
int convertToQsys(int a, int q, int z[])
{
int num = 0;
do
{
z[num++] = a % q;
a = a / q;
} while (a);
return num;
}
返回的是位数,便于输出
看一个问题,输入两个非负十进制整数A和B以及D(进制),输出A+B的D进制数
问题便迎刃而解
#include<cstdio>
//十进制转为q进制,返回位数
int convertToQsys(int a, int q, int z[])
{
int num = 0;
do
{
z[num++] = a % q;
a = a / q;
} while (a);
return num;
}
int main()
{
int a, b, d,q,z[40] = { 0 };
int num = 0;
scanf("%d %d %d", &a, &b, &q);
d = a + b;
num=convertToQsys(d, q, z);
int i=0;
for (i=num-1; i >= 0; i--)printf("%d", z[i]);
return 0;
}
结果