P1601 A+B Problem(高精)
作者:互联网
吐槽
自己亲手做出来最难的模拟题,花费了好久。
分析
10500大小的数据,肯定不能用正常的数据,因此只能用数组来存放每一位数字。
接着是将数据位数对齐,对于位数小的,前面补零(位数相同直接加)
然后相加就ok
最最最难得就是相加部分(从后往前加)
先考虑进位问题。设置标志判断是否进位,当下一位之和大于9(一定是9!!!)时,标志设true,否则设false。
然后根据标志判断是否当前数加一
还有容易忽视的就是,当轮到首位,又要进位时,直接输出1。
1 #include<bits/stdc++.h> 2 using namespace std; 3 char a[500],b[500]; 4 int ans[500]={0}; 5 void add(char *a,char *b,int length){ 6 bool flag=false; 7 for(int i=length-1;i>=0;i--){ 8 int temp=(int)(a[i]-'0')+(int)(b[i]-'0'); 9 if(flag){ 10 temp++; 11 } 12 if(i==0&&temp>9){ 13 cout<<1; 14 } 15 if(temp<10){ 16 ans[i]=temp; 17 flag=false; 18 }else{ 19 ans[i]=temp%10; 20 flag=true; 21 } 22 } 23 for(int i=0;i<length;i++){ 24 cout<<ans[i]; 25 } 26 } 27 int main() 28 { 29 cin>>a; 30 cin>>b; 31 int a_length=strlen(a),b_length=strlen(b); 32 char min_char=a_length<b_length?'a':'b'; 33 int d=abs(a_length-b_length); 34 if(d==0){ 35 add(a,b,a_length); 36 return 0; 37 } 38 if(min_char=='a'){ 39 char plus[500]; 40 for(int i=0;i<b_length;i++){ 41 if(i<d){ 42 plus[i]='0'; 43 } 44 else{ 45 plus[i]=a[i-d]; 46 } 47 } 48 add(plus,b,b_length); 49 } 50 else{ 51 char plus[500]; 52 for(int i=0;i<a_length;i++){ 53 if(i<d){ 54 plus[i]='0'; 55 } 56 else{ 57 plus[i]=b[i-d]; 58 } 59 } 60 add(plus,a,a_length); 61 } 62 return 0; 63 }
标签:temp,int,char,length,高精,进位,P1601,Problem,500 来源: https://www.cnblogs.com/lvjt0208/p/14639185.html