感觉写的有限啰嗦了,dot找小数点,first找第一位非0的数字
#include<iostream>
#include<vector>
#include<cstring>
int k1,k2,n,flag=1;
char d1[105],d2[105],s1[105],s2[105];
int change(char* s,char* d,int n){
int dot=-1,first=-1,top=1,i;
for(int i=0;i<strlen(s);i++){
if (s[i]=='.')dot=i;
if(s[i]!='0'&& s[i]!='.' && first==-1)first=i;
}
if (first==-1){
for(int i=0;i<=n;i++)d[i]='0';
return 0;
}
for(i=first;i<strlen(s) && top<=n;i++)if (s[i]!='.')d[top++]=s[i];
while(top<=n)d[top++]='0';
if(dot==-1)return strlen(s)-first;
else return dot>first?(dot-first):(dot-first+1);
}
using namespace std;
int main(){
cin>>n>>s1>>s2;
k1=change(s1,d1,n);
k2=change(s2,d2,n);
for(int i=1;i<=n;i++)if (d1[i]!=d2[i])flag=0;
if (flag){
cout<<"YES 0.";
for(int i=1;i<=n;i++)cout<<d1[i];
cout<<"*10^"<<k1;
}
else{
cout<<"NO 0.";
for(int i=1;i<=n;i++)cout<<d1[i];
cout<<"*10^"<<k1<<" 0.";
for(int i=1;i<=n;i++)cout<<d2[i];
cout<<"*10^"<<k2;
}
return 0;
}