解题思路:
注意事项:
参考代码:
#include<stdio.h>
int main()
{
char str1[50],str2[50];
long long s,s1,s2,ans;
int i,a1,a2,a,b,c,w,flag;
while(scanf("%s %s",str1,str2)!=EOF){
s1=s2=flag=b=c=a1=0;
for(i=0;str1[i];i++){
if(str1[i]=='-')
flag=1;
else if(str1[i]=='.')
c=1;
else if(str1[i]=='e'||str1[i]=='E'){
sscanf(str1+i+1,"%d",&b);
a1+=b;
break;
}
else{
s1=s1*10+str1[i]-'0';
a1-=c;
}
}
if(flag) s1=-s1;
flag=b=c=a2=0;
for(i=0;str2[i];i++){
if(str2[i]=='-')
flag=1;
else if(str2[i]=='.')
c=1;
else if(str2[i]=='e'||str2[i]=='E'){
sscanf(str2+i+1,"%d",&b);
a2+=b;
break;
}
else{
s2=s2*10+str2[i]-'0';
a2-=c;
}
}
if(flag) s2=-s2;
if(a1<a2)
for(;a1<a2;a2--)
s2*=10;
else if(a1>a2)
for(;a1>a2;a1--)
s1*=10;
a=a1;s=s1+s2;
if(!s){
printf("0\n");
continue;
}
while(a<0&&s%10==0){
s/=10;
a++;
}
if(a>=0){
printf("%lld",s);
for(i=0;i<a;i++)
printf("0");
printf("\n");
continue;
}
flag=0;
if(s<0){
s=-s;
flag=1;
}
ans=1;w=0;
while(ans<=s){
ans*=10;
w++;
}
if(ans>1){
ans/=10;
w--;
}
if(flag)
printf("-");
printf("%lld",s/ans);
if(ans>1)
printf(".%lld",s%ans);
printf("e%d\n",a+w);
}
return 0;
}
---------------------
作者:子夜葵
来源:CSDN
原文:https://blog.csdn.net/lzyws739307453/article/details/79616818
版权声明:本文为博主原创文章,转载请附上博文链接!
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1055 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:590 |
简单的a+b (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1432 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:910 |
剪刀石头布 (C语言代码)浏览:1792 |
wu-理财计划 (C++代码)浏览:907 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:512 |
大神老白 (C语言代码)浏览:637 |