九度oj 1016:火星A+B

http://ac.jobdu.com/problem.php?id=1016 大数相加原理

View Code
  1 /*大数相加原理*/
2 #include<iostream>
3 #include<vector>
4 #include<cmath>
5 #include<cstring>
6 #include<algorithm>
7 #include<cstdlib>
8 using namespace std;
9 vector<int>prime;
10 vector<int>v1;//
11 vector<int>v2;//两个加数
12 vector<int>v;//
13 bool isprime(int n)
14 {
15 if(n<2) return false;
16 for(int i=2;i<=sqrt(n);i++)
17 {
18 if(n%i==0) return false;
19 }
20 return true;
21 }
22 void init()//素数表
23 {
24 int i;
25 for(i=2;i<=200;i++)
26 {
27 if(isprime(i)) prime.push_back(i);
28 }
29 //for(i=0;i<prime.size();i++) cout<<prime[i]<<endl;
30 }
31 void convert(vector<int>&v,string s)//各位数字分离到向量里面
32 {
33 v.clear();
34 string temp="";
35 int i,len=s.length();
36 for(i=0;i<len;i++)
37 {
38 if(s[i]==',')
39 {
40 v.push_back(atoi(temp.c_str()));
41 temp="";
42 }
43 else temp+=s[i];
44 }
45 v.push_back(atoi(temp.c_str()));
46 //for(i=0;i<v.size();i++) cout<<v[i]<<" ";
47 //cout<<endl;
48 }
49 void add(vector<int> &v,vector<int>v1,vector<int>v2)//依次按位相加
50 {
51 v.clear();
52 int i=v1.size()-1,j=v2.size()-1,k=0,extra=0,temp;
53 while(i>=0 && j>=0)
54 {
55 temp=v1[i]+v2[j]+extra;
56 if(temp<prime[k])
57 {
58 v.push_back(temp);
59 extra=0;
60 }
61 else
62 {
63 v.push_back(temp%prime[k]);
64 extra=temp/prime[k];
65 }
66 i--;j--;k++;
67 }
68 vector<int>vv;
69 int cur;
70 if(i<0) vv=v2,cur=j;
71 else vv=v1,cur=i;
72 while(cur>=0)
73 {
74 temp=vv[cur]+extra;
75 if(temp<prime[k])
76 {
77 v.push_back(temp);
78 extra=0;
79 }
80 else
81 {
82 v.push_back(temp%prime[k]);
83 extra=temp/prime[k];
84 }
85 cur--;k++;
86 }
87 if(extra!=0) v.push_back(extra);
88 reverse(v.begin(),v.end());
89 for(i=0;i<v.size()-1;i++) cout<<v[i]<<",";
90 cout<<v[v.size()-1]<<endl;
91 }
92 int main()
93 {
94 init();
95 string s1,s2;
96 while(cin>>s1>>s2)
97 {
98 if(s1=="0" && s2=="0") break;
99 convert(v1,s1);
100 convert(v2,s2);
101 add(v,v1,v2);
102 //cout<<s1<<" "<<s2<<endl;
103 }
104 //system("pause");
105 return 0;
106 }


 

posted @ 2012-03-30 11:20  keepmoving89  阅读(246)  评论(0编辑  收藏  举报