pat1060

来源:互联网 发布:手机淘宝店铺首页怎么装修 编辑:程序博客网 时间:2024/06/05 01:59

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