题目没什么难的,就是敲代码的时候能把人琐碎死。
我是把有效数字和小数点分开来保存的。
哎呀还是不说了,真烦。直接上码。
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
typedef struct shu{
string s;
int head;
void inpu(){
s="";
string str;
cin>>str;
int i,start,dot=0;
for(i=0;i<str.length()&&(str[i]=='0'||str[i]=='.');i++)
if(str[i]=='.')
dot=i;
start=i;
if(start>=str.length()){
s="0";
head=0;
}
else{
for(i=start;i<str.length();i++)
if(str[i]!='.')
s+=str[i];
else
dot=i;
//如果没有找到小数点,那就算小数点在最后一位数字后面
if(dot==0) dot=str.length();
if(start<dot)head=dot-start;
else head=dot+1-start;
}
//cout<<s<<" "<<head<<endl;
}
string func(int x){
string re="";
re+="0.";
int i;
for(i=0;i<x&&i<s.length();i++)
re+=s[i];
for(;i<x;i++)
re+='0';
return re;
}
}shu;
int m;
shu a,b;
int main(){
string sa,sb;
while(~scanf("%d",&m)){
a.inpu();
sa=a.func(m);
b.inpu();
sb=b.func(m);
if(sa==sb&&a.head==b.head){
printf("YES ");
cout<<sa;
printf("*10^%d\n",a.head);
}
else{
printf("NO ");
cout<<sa;
printf("*10^%d ",a.head);
cout<<sb;
printf("*10^%d\n",b.head);
}
}
return 0;
}