这题的话只能自己题目还是做少了,一直没想到居然还有前面多个0的情况,本题不难,但是想拿满分可能不是很容易,我的做法是把2个数字按是否为0来分的,非0的情况,指数怎么算,我的做法是用小数点的位置减去第一个非0非小数点的位置,但是如果减出来的值,小于0,还得加1,大家可以想下为什么
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int n;
char c1[201],c2[201],cc1[201],cc2[201];
int l1,l2;
int i,j;
while(scanf("%d%s%s",&n,c1,c2)!=EOF)
{
l1=strlen(c1);
l2=strlen(c2);
int flag=1;
int j1,j2;
j1=l1;
j2=l2;
int is01,is02;
is01=is02=1;
int f1,f2;
for(i=0;i<l1;i++)
{
if(c1[i]=='.')
j1=i;
if(c1[i]!='0'&&c1[i]!='.')
is01=0;
}
for(i=0;i<l1;i++)
{
if(c1[i]!='0'&&i!=j1)
{
f1=i;
break;
}
}
for(i=0;i<l2;i++)
{
if(c2[i]=='.')
j2=i;
if(c2[i]!='0'&&c2[i]!='.')
is02=0;
}
for(i=0;i<l2;i++)
{
if(c2[i]!='0'&&i!=j2)
{
f2=i;
break;
}
}
int ci1,ci2;
ci1=ci2=0;
int cnt1=0;
int cnt2=0;
if(is01==1)
{
cnt1=n;
for(i=0;i<n;i++)
cc1[i]='0';
cc1[n]='\0';
ci1=0;
}
else
{
ci1=j1-f1;
if(ci1<0)
ci1++;
for(j=f1;j<l1;j++)
{
if(c1[j]=='.')
continue;
cc1[cnt1]=c1[j];
cnt1++;
if(cnt1==n)
{
cc1[cnt1]='\0';
break;
}
}
}
if(is02==1)
{
cnt2=n;
for(i=0;i<n;i++)
cc2[i]='0';
cc2[n]='\0';
ci2=0;
}
else
{
ci2=j2-f2;
if(ci2<0)
ci2++;
for(j=f2;j<l2;j++)
{
if(c2[j]=='.')
continue;
cc2[cnt2]=c2[j];
cnt2++;
if(cnt2==n)
{
cc2[cnt2]='\0';
break;
}
}
}
if(ci1!=ci2)
flag=0;
if(strcmp(cc1,cc2)!=0)
flag=0;
if(flag)
{
printf("YES 0.");
for(i=0;i<cnt1;i++)
printf("%c",cc1[i]);
printf("*10^%d",ci1);
}
else
{
printf("NO 0.");
for(i=0;i<cnt1;i++)
printf("%c",cc1[i]);
printf("*10^%d ",ci1);
printf("0.");
for(i=0;i<cnt2;i++)
printf("%c",cc2[i]);
printf("*10^%d",ci2);
}
puts("");
}
return 0;
}