标签:
Description
Input
Output
Sample Input
1.1 2.9 1.1111111111 2.3444323343 1 1.1
Sample Output
4 3.4555434454 2.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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zuguodexiaoguoabc/article/details/46966803