大数相加模板:
string big_add(string a,string b){ memset(sum,0,sizeof(sum)); int len1=a.size(); int len2=b.size(); int pos=0; int i,j; for(i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--){ int y=a[i]-'0'+b[j]-'0'; if(y+sum[pos]<10) { sum[pos]+=y; pos++; } else { sum[pos]+=y-10; sum[pos+1]++; pos++; } } if(pos<len1){ for(int t=i;t>=0;t--){ sum[pos++]+=a[t]-'0'; } } if(pos<len2){ for(int t=j;t>=0;t--){ sum[pos++]+=b[t]-'0'; } } if(sum[pos]!=0) pos++; string s=""; for(int i=pos-1;i>=0;i--){ char x; x=sum[i]+'0'; s+=x; } return s; }
大数相减模板(含判断):
string big_jian(string a,string b){//规定a>b int len1=a.size(); int len2=b.size(); int i,j; for(i=len2-1,j=len1-1;i>=0&&j>=0;i--,j--){ a[j]=a[j]-b[i]+'0'; if(a[j]<'0'){ int k=j-1; while(a[k]<='0'){ a[k]='9'; k--; } a[k]-=1; a[j]+=10; } } string s=""; for (i = 0; i<len1; i++) if (a[i] != '0') break; for (; i<len1; i++) s+=a[i]; return s; } bool check (string a,string b){ if(a.size()>b.size()) return 0; else if(a.size()<b.size()) return 1; return a<=b; }