转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8448876.html
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 int main() 6 { 7 string s1, s2; 8 cin>>s1>>s2; 9 int i; 10 11 int s1len=s1.length();//数的长度 12 int s2len=s2.length(); 13 int s1befor=s1.find(".");//整数长度 14 int s2befor=s2.find("."); 15 int s1after=s1len-s1befor-1;//小数长度 16 int s2after=s2len-s2befor-1; 17 int maxp=max(s1after,s2after);//最长小数长度 18 int maxi=max(s1befor, s2befor); 19 reverse(s1.begin(), s1.end());//倒置 20 reverse(s2.begin(), s2.end()); 21 22 int pp1=s1.find("."), pp2=s2.find("."); 23 if(pp1<pp2)//将小数点对齐 24 { 25 for(int i=0; i<pp2-pp1; i++) 26 { 27 s1="0"+s1; 28 } 29 s1.erase(pp2,1);//对齐后删除小数点 30 s2.erase(pp2,1); 31 } 32 if(pp2<=pp1) 33 { 34 for(int i=0; i<pp1-pp2; i++) 35 { 36 s2="0"+s2; 37 } 38 s1.erase(pp1,1); 39 s2.erase(pp1,1); 40 } 41 42 int a[200]={0}, b[200]={0}; 43 a[0]=s1.length(); 44 b[0]=s2.length(); 45 for(i=1; i<=a[0]; i++)//将数装到数组里 46 { 47 a[i]=s1[i-1]-'0'; 48 49 } 50 for(i=1; i<=b[0]; i++) 51 { 52 b[i]=s2[i-1]-'0'; 53 54 } 55 int k=max(a[0], b[0]);//做个大数加法 56 for(i=1; i<=k ;i++) 57 { 58 a[i+1]+=(a[i]+b[i])/10; 59 a[i]=(a[i]+b[i])%10; 60 } 61 if(a[k+1]>0) 62 { 63 a[0]=k+1; 64 maxi++; 65 } 66 else 67 a[0]=k; 68 while(a[a[0]]==0&&a[0]>maxp+1)//除去整数前0 69 { 70 a[0]--; 71 maxi--;//除去一个零,整数长度减一 72 } 73 74 reverse(&a[1], &a[1]+a[0]); 75 while(a[a[0]]==0&&a[0]>maxi)//出去小数后边的0 76 { 77 a[0]--; 78 maxp--;//除去一个0,小数长度减一 79 } 80 81 for(i=1; i<=a[0]; i++) 82 { 83 cout<<a[i]; 84 if(i==maxi&&a[0]>maxi) 85 cout<<"."; 86 } 87 }