• 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 }
  • 相关阅读:
    IOS debug网络PonyDebugger 实践篇
    基于S7-200的PLC对里程轮(增量式码盘)解码的应用
    SICP 习题 (1.14)解题总结
    TQ210裸机编程(2)——LED流水灯
    DP练习(初级):ZigZag
    java 十六进制数的转换
    Oracle DB 执行表空间时间点恢复
    html中文乱码(解决办法)
    html的列表
    MySQL的模糊搜索
  • 原文地址:https://www.cnblogs.com/zhishoumuguinian/p/8448876.html
Copyright © 2020-2023  润新知