进制转换步骤:
将P进制转换为Q进制,需要分为两步
- 将P进制数转化为十进制数
- 将十进制转化为Q进制
int y =0,product=1;//p进制x转化为10进制的y
while(x!=0){
y=y+(x%10)*product;//x%10为了取x的个位数
x=x/10;
product=product*p;
}
//十进制y转化为Q进制z
int z[40],num=0;//数组z存放Q的进制数y的每一位,num为位数
do{
z[num++] = y%Q;//除基取余
y=y/Q;
}while(y!=0);
//这样数组从高位z[num-1]到低位num[0]就正好是Q进制的z。
//这儿用do while而不用while是因为如果y正好为0,用while会让循环直接跳出,结果出错。
题目:PAT 1022 D进制的A+B (20分)
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
解答:
//一刷代码
#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main() {
long long int a,b,c;
int d;
cin>>a>>b>>d;
c = a+b;
int v[100];
int i = 0;
if(c==0){
cout<<"0";
return 0;
}
while(c!=0){//有一个测试点通不过,因为少考虑了c = 0的情况
v[i] = c%d;
c = c/d;
i++;
}
for(int j = i-1;j>=0;j--){
cout<<v[j];
}
return 0;
}
//整理思路后的代码
#include<iostream>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
a=a+b;
int z[40],num=0;//z里面存放c进制数的每一位,num表示位数。
do{
z[num++]=a%c;
a/=c;
}while(a!=0);
for(int i = num-1;i>=0;i--)//逆序输出就是结果
cout<<z[i];
return 0;
}