洛谷 P1604 B进制星球 高精度多进制加法

P1604 B进制星球

  • 时空限制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进制数,表示输入的两个数的和。

输入输出样例

输入样例#1:
4
123
321
输出样例#1:
1110

说明

进制计算器

------------------------------------------------------------------------------------------------------

套路依旧是那个套路,只是模数和除数变了而已

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 }
高精度进制加法
原文地址:https://www.cnblogs.com/lpl-bys/p/7785053.html