大数加法一般为小学生式的“竖式计算”要特别注意的是借位与进位的问题(先给看c++写法,我怕先看了python写法,会看不下去c++写法)这题还有要注意的是
1、同符号的话,直接加就行,最后再看正负号
2、不同的话则看,两个数的模的大小,在最后判断填补正负号,
AC代码:
#include#include #include #include #include using namespace std;const int maxn = 10110;char ch1[maxn],ch2[maxn];int a[maxn],b[maxn],p,q,carry;int c[maxn],car;bool flag;void add(int len){//carry=0无进位,=1有进位 for(int i=0;i =10){ carry=1; c[i]=t-10; } else { carry=0; c[i]=t; } } if(carry==1)c[len]=1;}int cmp(int l){ for(int i=l-1;i>=0;i--){ if(a[i]==b[i])continue; if(a[i]>b[i]){ return 1; } else { return -1; } } return 2;}int minu(int l1,int l2){//car=0无借位,=1有借位 if(l1==l2){ int r=cmp(l1); if(r==2){ flag=true; return 0; } else if(r==1){ for(int i=0;i =b[i]){ c[i]=a[i]-b[i]; car=0; } else{ c[i]=a[i]+10-b[i]; car=1; } } } else { for(int i=0;i =a[i]){ c[i]=b[i]-a[i]; car=0; } else{ c[i]=b[i]+10-a[i]; car=1; } } } } else { if(l1>l2){ for(int i=0;i =b[i]){ c[i]=a[i]-b[i]; car=0; } else{ c[i]=a[i]+10-b[i]; car=1; } } } else { for(int i=0;i =a[i]){ c[i]=b[i]-a[i]; car=0; } else{ c[i]=b[i]+10-a[i]; car=1; } } } }}int main(){ int len1=0,len2=0,i,j; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>ch1>>ch2; if(ch1[0]=='-')p=1; if(ch2[0]=='-')q=1; for(i=strlen(ch1)-1;i>=p;i--){ a[len1++]=ch1[i]-'0'; } for(i=strlen(ch2)-1;i>=q;i--){ b[len2++]=ch2[i]-'0'; } carry=0; car=0; flag=false; int len=max(len1,len2); if(p==0&&q==0){ add(len); } else if(p==1&&q==1){ add(len); cout<<"-"; } else { minu(len1,len2); if(len1>len2&&p==1&&q==0){ cout<<"-"; } else if(len1 =0){ if(c[len]!=0)break; len--; }//cout< < =0){ cout<
上面写的可能有点烦,还没来的及精简,先看着
下面是python
a=int (input());b=int (input());print(a+b);是不是感觉被耍了,嘿嘿