大明A+B

来源:互联网 发布:mac上好用的编程软件 编辑:程序博客网 时间:2024/06/10 06:12
E - 大明A+B
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。 
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。 

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。 
 

Input

本题目包含多组测试数据,请处理到文件结束。 
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
 

Output

请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。 
 

Sample Input

1.1 2.91.1111111111 2.34443233431 1.1
 

Sample Output

43.45554344542.1
思路:这个题昨天中午就在思考,隔了几个小时,写的差不多了,就是当时不知道后导零怎么去掉了,然后和学弟一个在交流,灵感油然而生,是从后面判断,是0的话,continue,记一下不为0的位置,然后按要求输出即可。
主要思想:我就是把两个数小数点对齐控制,左边的相加,右边的对应相加(位数不同的用0补充,使得左边的位数相同,右面的位数相同。然后右边的先相加,放到result1数组里面,result1控制一下比右边的数长度多1,result1[0]存放进位,result2数组存放左边的数相加的结果,result2[0]存放进位。
#include<iostream>#include<stdio.h>#include<string.h>#include<string>#include<algorithm>using namespace std;int main(){string a,b;    int result1[500],result2[500];int posa,posb,rgta,lfta,rgtb,lftb,i,k,l,pos,j,flg;while(cin>>a>>b){pos=0;flg=0;memset(result1,0,sizeof(result1));memset(result2,0,sizeof(result2));if(a.find(".")==-1){  posa=a.size();a=a+".";}else posa=a.find(".");   if(b.find(".")==-1)   {   posb=b.size();      b=b+".";  //123456789.      }   else     posb=b.find(".");//  23498.78998     rgta=a.size()-posa-1;     rgtb=b.size()-posb-1;     lfta=posa;     lftb=posb;     if(rgta>rgtb)       {          for(i=1;i<=rgta-rgtb;i++)            b=b+"0";           rgtb=rgta;       }       else if(rgta<rgtb)       {        for(i=1;i<=rgtb-rgta;i++)           a=a+"0";           rgta=rgtb;       }       if(lfta>lftb)         {         for(i=1;i<=lfta-lftb;i++)          //b.insert(0,'0'); b='0'+b;         lftb=lfta;         posb=posa;         }         else if(lfta<lftb)          {         for(i=1;i<=lftb-lfta;i++)         //a.insert(0,'0');      a='0'+a;         lfta=lftb;         posa=posb;         }         k=rgta;         for(i=a.size()-1;i>posa;i--)       {          result1[k]=(a[i]-'0')+(b[i]-'0');          k--;       }       for(i=rgta;i>=1;i--)       {         result1[i-1]=result1[i-1]+result1[i]/10;         result1[i]=result1[i]%10;       }         k=lfta;         for(i=lfta-1;i>=0;i--)         {            result2[k]=(a[i]-'0')+(b[i]-'0');k--;         }       for(i=lfta;i>=1;i--)       {         result2[i-1]=result2[i-1]+result2[i]/10;         result2[i]=result2[i]%10;       }       if(result1[0]!=0)       {          result2[lfta]+=result1[0];          if(result2[lfta]>=10)            {             for(i=lfta;i>=1;i--)                {                       result2[i-1]=result2[i-1]+result2[i]/10;                       result2[i]=result2[i]%10;                        if(result2[i-1]<10)                          break;                 }            }       }   int l=0;       if(result2[0]==0)       {         for(i=1;i<=lfta;i++)          cout<<result2[i];               for(i=rgta;i>=1;i--)   {   if(result1[i]==0)   continue;   else   {   flg=1;   pos=i;   break;   }   }     if(flg)   cout<<".";   for(i=1;i<=pos;i++)   cout<<result1[i];  cout<<endl;       }       else       {      for(i=0;i<=lfta;i++)          cout<<result2[i];          for(i=rgta;i>=1;i--)   {   if(result1[i]==0)   continue;   else   {   flg=1;   pos=i;   break;   }   }   if(flg)   cout<<".";   for(i=1;i<=pos;i++)   cout<<result1[i];  cout<<endl;       }}return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 面对出轨还不想离婚的老公怎么办 法院执行局把案划错了不承认怎么办 手机nfc功能被手机壳挡住怎么办 飞信短信登录验证码达到上限怎么办 手机自带短信软件没了怎么办 老婆出轨孩子又3个不知道怎么办 骑电动车摔跤小脚趾疼有点肿怎么办 第一次太疼了有心理阴影了怎么办 天梭机械表调了时间忽然慢怎么办 支付宝信用住到酒店没房间怎么办 拳头打在硬上骨头肿了怎么办 领导决策出现了失误你该怎么办 我的直销团队走到瓶颈了怎么办 孕妇8个月便秘大便带血怎么办 爱他美金装冲泡有泡沫怎么办 做雅思听力时理解不了原文怎么办 英国读语言班不想读研了怎么办 英国读研本科学位不够分怎么办 英国华威大学读研没分到宿舍怎么办 英国留学申请大学成绩没通过怎么办 很想上专升本但是专科挂科怎么办 英国学校申请的gpa太低了怎么办 博士面试通过后导师不签名怎么办 资助出国留学协议书写错了怎么办 人生最低谷运气最差的时候怎么办 孩子出国留学一年后想回国怎么办 领导给我娃的钱我怎么办 在西浦大三成绩不好影响申研怎么办 日本国想在中国开分公司要怎么办 美国生完孩子做飞机婴儿怎么办 会计专硕复试英语面试不好怎么办 被打过狂犬疫苗的狗咬了怎么办 保姆和雇主带孩子玩受伤了怎么办 银行流水造假拒签10年怎么办 老师进修被学校扣工资该怎么办 老婆性格太倔结婚一年想离婚怎么办 天正打图窗户线条太粗怎么办 孩子在幼儿园不敢跟老师说话怎么办 温州教育准考证号密码忘了怎么办 高等继续教育网打不开课程怎么办 安运继续教育的登录密码忘了怎么办