还能说什么呢?一道畜生题!
测试点:
4
0000 0000.0
输出:YES 0.0000*10^0
思路:
1.去小数点
2.去前导0
3.截取N位有效位组成两个新串
4.对比指数和有效数字是否相同
#include<cstdio>
#include<cstring>
int check(char s[]){
for(int i=0;s[i]!='\0';i++){
if(s[i]!='0') return false;
}
return true;
}
int main(){
int N;
char s1[130],s2[130];
scanf("%d",&N);
scanf("%s%s",s1,s2);
int len1=strlen(s1);
int len2=strlen(s2);
int i,j;
//s1去小数点
i=0;
while(i<len1&&s1[i]!='.'){
i++;
}
int cnt1=i;
while(cnt1!=len1&&i<len1){
s1[i]=s1[i+1];
i++;
}
//s2去小数点
i=0;
while(i<len2&&s2[i]!='.'){
i++;
}
int cnt2=i;
while(cnt2!=len2&&i<len2){
s2[i]=s2[i+1];
i++;
}
//s1去前导0
i=0;
while(s1[i]=='0'){
i++;
}
j=0;
cnt1=cnt1-i;
len1=strlen(s1);
while(j+i<len1){
s1[j]=s1[j+i];
j++;
}
s1[j]='\0';
//s2去前导0
i=0;
while(s2[i]=='0'){
i++;
}
j=0;
cnt2=cnt2-i;
len2=strlen(s2);
while(j+i<len2){
s2[j]=s2[j+i];
j++;
}
s2[j]='\0';
//s1补尾0至100位
i=strlen(s1);
while(i<=100){
s1[i]='0';
i++;
}
//s2补尾0至100位
i=strlen(s2);
while(i<=100){
s2[i]='0';
i++;
}
s1[N]='\0';
s2[N]='\0';
if(strcmp(s1,s2)==0&&check(s1)){
cnt1=0;
cnt2=0;
}
if(cnt1!=cnt2){
printf("NO 0.%s*10^%d 0.%s*10^%d\n",s1,cnt1,s2,cnt2);
return 0;
}
//对s1和s2串比对
int flag=0;
if(strcmp(s1,s2)!=0){
flag=1;
}
//输出
if(flag==0){
printf("YES 0.%s*10^%d\n",s1,cnt1);
}else{
printf("NO 0.%s*10^%d 0.%s*10^%d\n",s1,cnt1,s2,cnt2);
}
return 0;
}