1.将p进制x转换为十进制数y
循环处理:
其中的x是为p进制的数字,如二进制10001之类的,product我暂时理解为权重,y为最终十进制结果;
while的每一轮取出x的最后一位数字乘上权重,然后加到y上,然后x自除10,product权重增加,这样下一轮x%10又可以取到x当前的最后一位;
int y = 0,product = 1;
while(x != 0)
{
y = y + (x % 10) * product;
x /= 10;
product = product * P;
}
——————————————————————————————————————————————————————
2.将十进制y转换为Q进制数z
原来是除基取余法,如将十进制11转换为二进制
11/2 = 5…1
5/2=2…1
2/2 = 1…0
1/2 =0…1
最后的结构由余数从下往上取,1011
代码:
int z[40],num = 0;
do{
z[num++] = y % Q;//数组z用于存放余数,最后逆序打印即可
y /= Q;
}while(y!=0);
这样二进制的结果为z[num-1]到z[0],为什么不用while的原因是因为如果传入的y如果为0,结果自然也要打印出来0,但如果用while循环的条件为y!=0,这样循环根本就进不去,所以首先要先进去一轮,这样z[0]就为0了,符合要求。
——————————————————————————————————————————————————————
实战题目:
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
代码:
#include <iostream>
using namespace std;
int main()
{
int a, b,d;
cin >> a >> b >> d;
int i = a + b;
int z[40] = {0}, num = 0;
//问题是要将十进制转换为二进制,需要用到除基取余法
//除基取余是要用do while来实行,还需要一个数组来存储结果
do {
z[num++] = i % d;
i = i / d;
} while (i != 0);
for (int j = num -1; j >=0; j--)
{
cout << z[j];
}
return 0;
}