之前一直wa是因为代码运行时有字符越界的情况,虽然结果没问题但是系统不让过
99999.889 0.111
1000.0 10000.0112233.1 333.9
123450000 777
123400000 777.700
0.000 0.0000
99999 1
1.2333 20.2667
1212121212.1111111 21212121.33300000000000000
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
char s1[1005],s2[1005];
int te[1005],s3[1005];
char x1[1005],x2[1005];
char s4[1005]={'0'};
int main()
{
while(scanf("%s %s",s1,s2)!=EOF)
{
int n1=strlen(s1);
int n2=strlen(s2);
int n=n1>n2?n1:n2;
for(int i=0;i<n;i++)
{
if(s1[i]=='.'&&i<n1)
{
n1=i;
strcpy(x1,s1+i+1);
}
if(s2[i]=='.'&&i<n2)
{
strcpy(x2,s2+i+1);
n2=i;
}
}
int m1=strlen(x1);
int m2=strlen(x2);
int m=m1>m2?m1:m2;
int temp=0;
memset(te,0,sizeof(te));
for(int i=m-1;i>=0;i--)
{
if(i<m1)
te[i]=te[i]+x1[i]-'0';
if(i<m2)
te[i]+=x2[i]-'0';
if(te[i]>=10)
{
if(i==0)
temp=te[i]/10;
else
te[i-1]=te[i]/10;
te[i]=te[i]%10;
}
}
memset(s3,0,sizeof(s3));
int k=0,x,y;
for(x=n1-1,y=n2-1;;x--,y--)
{
if(x<0&&y<0)
break;
if(x>=0)
s3[k]+=s1[x]-'0';
if(y>=0)
s3[k]+=s2[y]-'0';
if(temp!=0)
{
s3[k]+=temp;
temp=0;
}
if(s3[k]>=10)
{
s3[k+1]=s3[k]/10;
s3[k]=s3[k]%10;
}
k++;
}
k++;
while(te[m-1]==0)
m--;
while(s3[k-1]==0)
k--;
if(k<=0)
printf("0");
else
{
for(int i=k-1;i>=0;i--)
printf("%d",s3[i]);
}
if(te[m-1]!=0&&m>0)
{
printf(".");
for(int i=0;i<m;i++)
printf("%d",te[i]);
}
printf("\n");
strcpy(x1,s4);
strcpy(x2,s4);
}
return 0;
}