https://www.luogu.com.cn/problem/P1604
题目背景
进制题目,而且还是个计算器~~
题目描述
话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。
输入格式
共3行第1行:一个十进制的整数,表示进制B。第2-3行:每行一个B进制数正整数。数字的每一位属于{0,1,2,3,4,5,6,7,8,9,A,B……},每个数字长度<=2000位。
输出格式
一个B进制数,表示输入的两个数的和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| const int MAX=2000+10; int n; char a[MAX],b[MAX]; int c[MAX*2]; int main(){ freopen("in","r",stdin); sf(n); scanf("%s%s",a,b); int last =0,t, l1=strlen(a),l2=strlen(b) ; int i=l1-1,j=l2-1,cnt=0,t1,t2; while(i>=0 && j>=0){ if(a[i]>='A') t1= a[i]-'A'+10; else t1=a[i] - '0'; if(b[j]>='A') t2= b[j]-'A'+10; else t2=b[j] - '0'; t = t1 + t2 + last; c[cnt++]=t % n; last = t / n; i--;j--; } while(i>=0){ if(a[i]>='A') t1= a[i]-'A'+10; else t1=a[i] - '0'; t = t1 + last; c[cnt++] = t % n; last = t / n; i--; } while(j>=0){ if(b[j]>='A') t2= b[j]-'A'+10; else t2= b[j] - '0'; t = t2 + last; c[cnt++] = t % n; last = t / n; j--; } if(last!=0) c[cnt++] = last; for(int j=cnt-1;j>=0;j--){ if(c[j]>=10){ printf("%c",'A' + c[j] - 10); }else pf(c[j]); } return 0; }
|