2738:实数加法

转载请注明出处: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 }
原文地址:https://www.cnblogs.com/zhishoumuguinian/p/8448876.html