题目意思直接,要求将两个数转为科学计数法表示,然后比较是否相同 不过有精度要求
/* test 6 3 0.00 00.00 test 3 3 0.1 0.001 0.001=0.1*10^-2 pay 前导0 不同格式的0 */ #include<iostream> #include<stdio.h> #include<string.h> using namespace std; char a[105],b[105]; struct num { char s[105]; int k; }x,y; struct num getn(char a[],int n) { int na=strlen(a),i,j=na,k=na,t,flag=0; struct num x; memset(x.s,'0',n*sizeof(char)); x.s[n]='\0'; for(i=0;i<na;i++) { if(a[i]>'0'&&a[i]<='9'&&!flag) { j=i; flag=1; } if(a[i]=='.')k=i; } // printf("%d %d\n",j,k); if(j==na) { x.k=0; } else { t=0; for(i=j;i<na&&t<n;i++) if(i!=k)x.s[t++]=a[i]; if(k>j)x.k=k-j; else x.k=k-j+1; } //printf("%s %d\n",x.s,x.k); return x; } void deal(char a[],char b[],int n) { x=getn(a,n); y=getn(b,n); if(!strcmp(x.s,y.s)&&x.k==y.k)printf("YES 0.%s*10^%d\n",x.s,x.k); else printf("NO 0.%s*10^%d 0.%s*10^%d\n",x.s,x.k,y.s,y.k); } int main() { int na,nb,i,n,t,flag; while(scanf("%d%s%s",&n,a,b)!=EOF) { deal(a,b,n); } return 0; }