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;
}


 

阅读更多

没有更多推荐了,返回首页