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
思路
输出a
+b
的和的d
进制。
重点是十进制与任意进制的转换。这里是用十进制转换成任意进制的逆过程。
#include<iostream>
#include<math.h>
#define MAX 100
using namespace std;
int main(){
int a,b,d;
cin>>a>>b>>d;
int n = a+b;
int maxbit = 0;
int result[MAX]={0};
// 将n转换成d进制
while(n>0){
int bit=0;
int m = n;
// 找当前最高位
while(m>=d){
m = m/d;
bit++;
}
if(maxbit==0) maxbit = bit;
// 当前最高位的值可能大于1,如:2*8^3这种;3是bit,2是result[bit]
result[bit]++;
n = n-pow(d,bit);
}
for(int i=maxbit;i>0;i--){
cout<<result[i];
}
// 输出8^0位的数
cout<<(a+b)%d<<endl;
return 0;
}