pat1060

这题的话只能自己题目还是做少了,一直没想到居然还有前面多个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;
}








 

你可能感兴趣的:(模拟)