这一题简直被自己蠢到了。
原来以为是0就直接输出0 最后一个case就是过不了 重写了代码也一样 最后发现我在csdn博客上复制别人代码是 根本没有复制过来 导致我想看别人 0的输出结果 其实在看自己的,最后发现了,将0的输出结果改成 相应格式就对了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<iterator>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
using namespace std;
void change(char s[],int index,int pindex )
{
int i=index;
int j=pindex;
for( i=index;s[j]!='\0';i++,j++)
s[i]=s[j];
s[i]='\0';
}
int non(char s[],int n)
{
int k=0,j,i,h;
int length;
int num=0;
while(s[k]=='0') k++;//前面是否有多余的零
if(s[k]=='.')
{
h=j=k;
k++;
while(s[k]=='0') k++;
if(s[k]=='\0')//是否为000.000
{
s[1]='.';
for(j=2;j<n+2;j++)
s[j]='0';
s[j]='\0';
}
else//不是 则是0.0#
{ num=k-j-1;
change(s,1,j);//将前面多余的零清除
// k-=num;
// printf("1: %s %d %d %d\n",s,num,j,k);
//3 0000.01000 0000.010000
if(num>0)
{ k-=j-1; //将小数点后的零去除 将非零数提前
change(s,2,k);
}
//printf(" 2: %s\n",s);
num=-num;
length=strlen(s);
if(length-2>n)//小数点后面的数的长度是否大于要比较的位数
s[n+2]='\0';
else if(length<n+2)//小数点后面的位数小于要比较的位数 补零
{
for(j=length;j<n+2;j++)
s[j]='0';
s[j]='\0';
}
}
}
else if(s[k]=='\0')//是否为000000
{
s[1]='.';
for(j=2;j<n+2;j++)
s[j]='0';
s[j]='\0';
}
else//是否为 #0.0
{
num-=1;
if(k!=0)//清除前面的零
{
for(j=0;s[j+k]!='\0';j++)
s[j]=s[j+k];
s[j]='\0';
}
k++;
while(s[k]!='.'&&s[k]!='\0') k++;
num=k;
length=strlen(s);
if(s[k]=='\0')//#00
{
if(length>=n)//判断数字长度是否大于等于比较长度
{
for(j=n-1;j>=0;j--)
s[j+2]=s[j];
s[n+2]='\0';
}
else
{
// printf("%d %d\n",length,n+3);
for(j=length;j<n+2;j++)
s[j]='0';
s[j]='\0';
for(j=n-1;j>=0;j--)
s[j+2]=s[j];
}
s[1]='.';
s[0]='0';
}
else //#0.0000
{
for(j=k-1;j>=0;j--)//将小数位覆盖
s[j+1]=s[j];
s[0]='0';
if(length-1>=n)
{
for(j=n+1;j>=1;j--)
s[j+1]=s[j];
s[n+2]='\0';
}
else
{
for(j=length;j<n+2;j++)
s[j]='0';
s[j]='\0';
for(j=n;j>=1;j--)
s[j+1]=s[j];
}
s[1]='.';
}
}
//printf("%s\n",s);
return num;
}
/*
3 0.1236 0.1235
5 12.50 12.500000
3 00.2 0.200000
3 0.0 0.0
*/
int main()
{
char a[10001],b[10001];
int n;
int length=0;
scanf("%d%s%s",&n,a,b);
int ka=non(a,n);
int kb=non(b,n);
//printf("%s %s\n",a,b);
if(ka==kb&&strcmp(a,b)==0)
{
printf("YES %s",a);
// if(ka!=0)
printf("*10^%d\n",ka);
}
else
{
printf("NO %s",a);
printf("*10^%d",ka);
printf(" %s",b);
// if(kb!=0)
printf("*10^%d",kb);
}
return 0;
}