pat 1060. Are They Equal (25)

题目意思直接,要求将两个数转为科学计数法表示,然后比较是否相同  不过有精度要求

/*

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;

}


 

 

你可能感兴趣的:(pat)