PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)

输入两个非负 10 进制整数 A 和 B (≤),输出 A+B 的 D (1)进制数。

输入格式:

输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式:

输出 A+B 的 D 进制数。

输入样例:

123 456 8

输出样例:

1103

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <stack>
 4 #include <string>
 5 #include <cstring>
 6 using namespace std;
 7 #define ll long long
 8 ll m,n;
 9 int c;
10 ll a[50];
11 ll b[50];
12 int main()
13 {
14     while(cin>>m>>n>>c){
15         if((m+n)==0){
16             cout<<"0"<<endl;
17             continue;
18         }
19         memset(a,0,sizeof(a));
20         memset(b,0,sizeof(b));
21         int t1=0,t2=0,t=0;
22         while(m){
23             a[t1++]=m%c;
24             m/=c;
25         }
26         while(n){
27             b[t2++]=n%c;
28             n/=c;
29         }
30         t=t1>=t2?t1:t2;
31         int tmp=0;
32         for(int i=0;i<t;i++){
33             a[i]+=tmp;
34             tmp=(a[i]+b[i])/c;
35             a[i]=(a[i]+b[i])%c;
36         }
37         if(tmp>0){
38             a[t++]=tmp;
39         }
40         for(int i=t-1;i>=0;i--){
41             cout<<a[i];
42             if(i==0) cout<<endl;
43         }
44     }
45     return 0;
46 }

 

posted @ 2019-07-14 16:37  wydxry  阅读(218)  评论(0编辑  收藏  举报
Live2D