题解 | #浮点数加法#
浮点数加法
https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8
#include <iostream> using namespace std; int main() { string a, b; while (cin >> a >> b) { int finda=a.find('.'); int findb=b.find('.'); int lena=a.size(); int lenb=b.size(); string zsa=a.substr(0,finda); string zsb=b.substr(0,findb); int lenxsa=lena-zsa.size()-1; int lenxsb=lenb-zsb.size()-1; string xsa=a.substr(finda+1,lenxsa); string xsb=b.substr(findb+1,lenxsb); int lenzsa=zsa.size(); int lenzsb=zsb.size(); if(lenxsa<lenxsb)//把小数和整数长度更大的全放在a里面 { string xx=xsa; xsa=xsb; xsb=xx; } if(lenzsa<lenzsb) { string xx=zsa; zsa=zsb; zsb=xx; } int zscha=abs(lenzsa-lenzsb); for(int i=1;i<=zscha;i++) { zsb='0'+zsb; } int xscha=abs(lenxsa-lenxsb); for(int i=1;i<=xscha;i++) { xsb=xsb+'0'; } //预处理终于结束了 int jw=0; lenxsa=xsa.size(); for(int i=lenxsa-1;i>=0;i--) { xsa[i]+=jw; int tpp=(xsa[i]-'0')+(xsb[i]-'0'); jw=tpp/10; tpp%=10; xsa[i]=tpp+'0'; } lenzsa=zsa.size();//应该加上这一句,重新调整一下lenza for(int i=lenzsa-1;i>=0;i--)//一开始出错是因为忘了lenza可能是短的那一方 { zsa[i]+=jw; int tpp=(zsa[i]-'0')+(zsb[i]-'0'); jw=tpp/10; tpp%=10; zsa[i]=tpp+'0'; } if(jw==1) { zsa='1'+zsa; } cout<<zsa<<'.'<<xsa<<endl; } }