P1601 A+B Problem(高精)
题目描述
高精度加法,x相当于a+b problem,b不用考虑负数。
输入输出格式
输入格式:
分两行输入a,b<=10^500
输出格式:
输出只有一行,代表A+B的值
输入输出样例
输入样例:
1 1
输出样例:
2
比较简单的高精度。
高精度。顾名思义,就是在很大的位数情况下进行运算。(炸int)
其基本思想就是用数组进行模拟加法。
模拟近位。
最后遍历数组输出。
附代码:
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 5 struct diff{ 6 int len;short x[3005]; 7 8 void read(){ 9 int len_read; 10 string read; 11 cin>>read; 12 len=0;len_read=read.size(); 13 for(int i=len_read-1;i>=0;i--)x[++len]=read[i]-48; 14 } 15 16 void write(){ 17 for(int i=len;i>=1;i--)printf("%d",x[i]); 18 printf(" "); 19 return ; 20 } 21 22 struct diff operator+(struct diff tmp){ 23 int c=0; 24 struct diff ans; 25 ans.len=tmp.len;if(len>ans.len)ans.len=len; 26 for(int i=1;i<=ans.len;i++) 27 { 28 ans.x[i]=x[i]+tmp.x[i]+c; 29 c=ans.x[i]/10;ans.x[i]%=10; 30 } 31 if(c>0)ans.x[++ans.len]=c; 32 return ans; 33 } 34 }a,b; 35 36 int main(){ 37 a.read();b.read();a=a+b;a.write(); 38 return 0; 39 }
我们每个人都应该做到精益求精,所以还可以将普通高精度升华一下
那就是传说中的万进制高精度:
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 string s1,s2; 5 int c,len,len1,a[100005],len2,b[100005]; 6 7 void turn() 8 { 9 int x,y,lx=s1.size(),ly=s2.size(),l,r; 10 int c[100005],d[100005]; 11 l=lx/4;r=ly/4; 12 x=lx-l*4;y=ly-r*4; 13 for(int i=0;i<x;i++)c[1]=c[1]*10+s1[i]-48; 14 for(int i=0;i<y;i++)d[1]=d[1]*10+s2[i]-48; 15 for(int i=2;i<=l+1;i++)c[i-(x==0)]=(s1[4*(i-2)+x]-48)*1000+(s1[4*(i-2)+x+1]-48)*100+(s1[4*(i-2)+x+2]-48)*10+(s1[4*(i-2)+x+3]-48); 16 for(int i=2;i<=r+1;i++)d[i-(y==0)]=(s2[4*(i-2)+y]-48)*1000+(s2[4*(i-2)+y+1]-48)*100+(s2[4*(i-2)+y+2]-48)*10+(s2[4*(i-2)+y+3]-48); 17 len1=l+(x>0);len2=r+(y>0); 18 for(int i=1;i<=len1;i++)a[i]=c[len1-i+1]; 19 for(int i=1;i<=len2;i++)b[i]=d[len2-i+1]; 20 21 } 22 23 int main() 24 { 25 cin>>s1>>s2; 26 turn(); 27 len=len1;if(len2>len)len=len2; 28 for(int i=1;i<=len;i++) 29 { 30 a[i]=a[i]+b[i]+c; 31 c=a[i]/10000; 32 a[i]%=10000; 33 } 34 if(c>0)a[++len]=c; 35 printf("%d",a[len]); 36 for(int i=len-1;i>=1;i--)printf("%04d",a[i]); 37 return 0;/*万进制高精加*/ 38 }
万进制高精加要注意输出“printf("%04d",a[i]);”
点个赞吧↓