OUTPUT
2.7956e2
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
struct NUM
{
long long sum;
int Point;///小数点
int E;///是不是有E
int flag;///是不是为小于零
int bit;///位数
//不知道为什么这用构造函数提交有问题
/*NUM()
{Point=0;
.....}*/
}num1,num2,num3;
void Surewhat(struct NUM *a,char *s)
{
int len=strlen(s);
for(int i=0;i<len;i++)
{
if(s[i]=='E'||s[i]=='e')
{sscanf(s+i+1,"%d",&a->E);
a->bit+=a->E;
break;
}
else if(s[i]=='.')
a->Point=1;
else if(s[i]=='-')
a->flag=1;
else
{
a->sum=a->sum*10+s[i]-'0' ;
a->bit-=a->Point;
}
}
if(a->flag)
a->sum*=-1;
}
int main()
{
char str1[100],str2[200];
while(scanf("%s %s",str1,str2)!=EOF)
{
num1.Point=0;
num1.E=0;
num1.flag=0;
num1.bit=0;
num1.sum=0;
num2.Point=0;
num2.E=0;
num2.flag=0;
num2.bit=0;
num2.sum=0;
num3.Point=0;
num3.E=0;
num3.flag=0;
num3.bit=0;
num3.sum=0;
Surewhat(&num1,str1);
Surewhat(&num2,str2);
if(num1.bit<num2.bit)
{
for(;num1.bit<num2.bit;num2.bit--)
{
num2.sum*=10;
}
}
else
for(;num1.bit>num2.bit;num1.bit--)
{
num1.sum*=10;
}
num3.bit=num1.bit;
num3.sum=num1.sum+num2.sum;
if(!num3.sum)
{
printf("0\n");
continue;
}
while(num3.bit<0&&num3.sum%10==0)
{
num3.sum/=10;
num3.bit++;
}
if(num3.bit>=0)
{
printf("%lld",num3.sum);
for(int i=0;i<num3.bit;i++)
printf("0");
printf("\n");
continue;
}
if(num3.sum<0)
{
num3.sum*=-1;
printf("-");
}
int ans=1,n=0;
while(ans<=num3.sum)//分整数和小数
{
ans*=10;
n++;
}
if(ans>1)
{
ans/=10;
n--;
}
printf("%lld",num3.sum/ans);
if(ans>1)
printf(".%lld",num3.sum%ans);
printf("e%d\n",num3.bit+n);
}
}