题目:
进制转换程序设计。给定一个R 进制的数 x,实现由 x 向任意非 R 进制数的
转换。
(1)中间必须经过二进制或十进制展开;
(2)输出结果必须展示出进制转换的展开式形式。例如,输入八进制 137,输
出:137 = 1*8^2 + 3*8^1 + 7*8^0
思路:
本题目实际上需要完成两次操作,第一次是将其他进制数转化为十进制数,第二次则是将十进制数转化为其他进制数,十进制数起到一个中间过渡量的作用,本题的主要模块一个利用循环完成,另一个运用递归处理。
代码:
#include<stdio.h>
#include<math.h>
void tran(int n, int m)//用于将十进制转化为其他进制
{
if (n == 0)
return;
else
tran(n / m, m);
printf("%d", n % m);
}
int main()
{
int trans = 0;
int c;
int i = 0;
int bit = 0;//计算转化为十进制的位数,方便在中间展开
int k;
int sum;
int summ = 0;//作为中间量的十进制数
char ch[1000] = { 0 };//用于储存转化为十进制数后的每一位
printf("请输入一个数及其进制\n");
scanf("%d,%d", &k, &c);
for (int z = k; z > 0; i++)//将其他进制转化为十进制形式,并用数组储存
{
ch[i] = z % 10;
z = z / 10;
bit++;
}
for (i = bit; i >= 0; i--)//计算十进制数
{
sum = ch[i] * pow(c, i);
summ += sum;
}
printf("%d\n", summ);
printf("%d=", k);
printf("%d*%d^%d", ch[bit - 1], c, bit - 1);//展开形式打印
for (i = bit - 2; i >= 0; i--)
{
printf("+%d*%d^%d", ch[i], c, i);
}
printf("\n请输入你想转化为的进制\n");
scanf("%d", &trans);
tran(summ, trans);//将十进制转化为其他进制并打印
return 0;
}