标签:
1,0 2,1 4,2,0 1,2,0 1 10,6,4,2,1 0 0
1,0,1 1,1,1,0 1,0,0,0,0,0
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN=1005; bool isPrime[MAXN]; int prime[MAXN],cnt; void sieve() { memset(isPrime,true,sizeof(isPrime)); for(int i=2;i<=1000;i++) { if(isPrime[i]) { prime[cnt++]=i; for(int j=i+i;j<=1000;j+=i) isPrime[j]=false; } } } char sa[MAXN]; char sb[MAXN]; struct BigInt{ int e[MAXN]; int len; BigInt() { memset(e,0,sizeof(e)); len=0; } BigInt(const char s[]) { memset(e,0,sizeof(e)); len=0; int l=strlen(s); int z=0; for(int i=0;i<l;i++) { if(s[i]==‘,‘) { e[len++]=z; z=0; } else { z*=10; z=z+(s[i]-‘0‘); } } e[len++]=z; for(int i=0;i<len/2;i++) { int t=e[i]; e[i]=e[len-i-1]; e[len-i-1]=t; } } BigInt operator+(const BigInt &t)const { BigInt res; res.len=max(len,t.len); int up=0; int i; for(i=0;i<res.len;i++) { int z=e[i]+t.e[i]+up; res.e[i]=z%prime[i]; up=z/prime[i]; } while(up!=0) { res.e[res.len++]=up%prime[i]; up/=prime[i]; i++; } return res; } void print() { for(int i=len-1;i>=1;i--) { printf("%d,",e[i]); } printf("%d\n",e[0]); } }; int main() { sieve(); while(scanf("%s %s",sa,sb)!=EOF) { BigInt a(sa); BigInt b(sb); if((a.len==1&&a.e[0]==0)||(b.len==1&&b.e[0]==0)) break; BigInt res; res=a+b; res.print(); } return 0; } /************************************************************** Problem: 1016 User: baneHunter Language: C++ Result: Accepted Time:10 ms Memory:1028 kb ****************************************************************/
标签:
原文地址:http://www.cnblogs.com/program-ccc/p/5500025.html