解题思路:
注意事项:
参考代码:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
string a,b;
cin >>a>>b;
int alen=a.length(),blen=b.length(),aplen=0,bplen=0; //aplen 小数点前的位数.
int i,j,aflag=0,bflag=0,ka=0,kb=0; //ka,kb 小数点后的位数。
for(i=0;i<alen;i++){
if(a[i]=='.')
aflag=1;
if(a[i]!='.'&&aflag==0)
aplen++;
if(aflag==1)
ka++;
}
if(ka>1)
ka--;
for(i=0;i<blen;i++){
if(b[i]=='.')
bflag=1;
if(b[i]!='.'&&bflag==0)
bplen++;
if(bflag==1)
kb++;
}
if(kb>1)
kb--;
if(aplen>bplen){
for(i=0;i<aplen-bplen;i++)
b="0"+b;
}
else{
for(i=0;i<bplen-aplen;i++)
a="0"+a;
}
if(ka>kb){
if(kb==0)
b+=".";
for(i=0;i<ka-kb;i++)
b+="0";
}
else{
if(ka==0)
a+=".";
for(i=0;i<kb-ka;i++)
a+="0";
}
int len=a.length();
int plen=aplen>bplen?aplen:bplen; //小数点前 的位数。
int k=ka>kb?ka:kb; //小数点后的位数。
int s[k+1];
memset(s,0,sizeof(s));
int w=0;
for(i=len-1;i>plen;i--,w++){
s[w]+=(a[i]-'0')+(b[i]-'0');
if(s[w]>9){
s[w+1]++;
s[w]-=10;
}
}
if(s[w]==0)
w--;
int sflag=0;
if(s[k]==0)
sflag=0;
else
sflag=1;
int ss[plen+1];
memset(ss,0,sizeof(ss));
int ww=0;
if(sflag==1)
ss[ww]+=1;
for(i=len-k-2;i>=0;i--,ww++){
ss[ww]+=(a[i]-'0')+(b[i]-'0');
if(ss[ww]>9){
ss[ww+1]++;
ss[ww]-=10;
}
}
if(ss[ww]==0)
ww--;
for(i=ww;i>=0;i--)
cout <<ss[i];
if(aflag||bflag)
cout <<".";
for(i=k-1;i>=0;i--)
cout <<s[i];
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复