标签:
#include<iostream> #include<cstring> using namespace std; struct bignum { int len; int num[505]; bignum() { memset(num,0,sizeof(num)); } } a,b,c; int cmp(bignum a,bignum b) { if(a.len>b.len)return 1; if(a.len<b.len)return 0; for(int i=1; i<=a.len; i++) { if(a.num[i]>b.num[i])return 1; } return 0; } bignum bigMinus(bignum a,bignum b) { bignum c; int clen=a.len; for(int i=1; i<=a.len; i++) { c.num[i]=a.num[i]-b.num[i]; if(c.num[i]<0) { c.num[i]+=10; a.num[i+1]--; } } while(c.num[clen]==0)clen--; c.len=clen; return c; } bignum bigAdd(bignum a,bignum b) { bignum c; int clen=a.len; for(int i=1; i<=a.len+1; i++) { c.num[i]=a.num[i]+b.num[i]; if(c.num[i]>=10) { c.num[i]-=10; a.num[i+1]++; } } if(c.num[clen+1])clen++; c.len=clen; return c; } bignum bigMultiply(bignum a,bignum b) { bignum c; int clen=a.len+b.len-1; for(int i=1; i<=a.len; i++) for(int j=1; j<=b.len; j++) { c.num[i+j-1]+=a.num[i]*b.num[j]; if(c.num[i+j-1]>=10) { c.num[i+j]+=c.num[i+j-1]/10; c.num[i+j-1]%=10; } } if(c.num[clen+1])clen++; c.len=clen; return c; }
调用:
int main() { string num1,num2; cin>>num1>>num2; a.len=num1.length(); b.len=num2.length(); for(int i=0; i<a.len; i++) { a.num[a.len-i]=num1[i]-‘0‘; } for(int i=0; i<b.len; i++) { b.num[b.len-i]=num2[i]-‘0‘; } if(cmp(a,b)) { c=bigAdd(a,b); } else { c=bigAdd(b,a); } // if(cmp(a,b)){ // c=bigMinus(a,b) // }else{ // printf("-"); // c=bigMinus(b,a); // } // c=bigMultiply(a,b); for(int i=c.len; i>0; i--) { cout<<c.num[i]; } }
标签:
原文地址:http://www.cnblogs.com/flipped/p/5005010.html