- 时空限制1s / 128MB
题目背景
进制题目,而且还是个计算器~~
题目描述
话说有一天,小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进制数,表示输入的两个数的和。
输入输出样例
说明
进制计算器
------------------------------------------------------------------------------------------------------
套路依旧是那个套路,只是模数和除数变了而已
AC代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #define maxn 2333 5 using namespace std; 6 struct BigNum{ 7 int s[maxn],len; 8 BigNum(){len=1;memset(s,0,sizeof(s));} 9 }; 10 BigNum a,b,c; 11 int n; 12 char ai[maxn],bi[maxn]; 13 void add(BigNum*,BigNum*,BigNum*); 14 int main(){ 15 scanf("%d",&n); 16 scanf(" %s %s",ai,bi); 17 a.len=strlen(ai); 18 b.len=strlen(bi); 19 for(int i=a.len-1;i>=0;i--) 20 if(‘0‘<=ai[i]&&ai[i]<=‘9‘) a.s[a.len-i]=ai[i]-48; 21 else a.s[a.len-i]=ai[i]-‘A‘+10; 22 for(int i=b.len-1;i>=0;i--) 23 if(‘0‘<=bi[i]&&bi[i]<=‘9‘) b.s[b.len-i]=bi[i]-48; 24 else b.s[b.len-i]=bi[i]-‘A‘+10; 25 add(&a,&b,&c); 26 for(int i=c.len;i>0;i--) 27 if(0<=c.s[i]&&c.s[i]<=9) printf("%d",c.s[i]); 28 else printf("%c",‘A‘+c.s[i]-10); 29 return 0; 30 } 31 void add(BigNum *x,BigNum *y,BigNum *z){ 32 z->len=max(x->len,y->len); 33 for(int i=1;i<=z->len;i++){ 34 z->s[i]+=x->s[i]+y->s[i]; 35 z->s[i+1]=z->s[i]/n; 36 z->s[i]%=n; 37 } 38 if(z->s[z->len+1]) z->len++; 39 }