題目要求:
比較兩個(gè)數(shù)是否相等
做題思路:
剛開始沒多想直接試了一下簡(jiǎn)單的strcmp播演,后來看來討論才發(fā)現(xiàn)要考慮的因素有很多:
特殊情況:
輸入數(shù)據(jù)是1.000和0001這種情況,甚至0001.000
這時(shí)候需要將多余的0去掉伦吠,通過判斷是整數(shù)還是小數(shù),整數(shù)只需去掉前面的0量愧,小數(shù)兩邊的0都要去掉趾痘。
數(shù)據(jù)調(diào)試案例:
0123 123(去掉前面的0)
00123.100 123.1(去掉兩邊的0)
123.000 123(去掉兩邊的0和小數(shù)點(diǎn))
#include<stdio.h>
#include<string.h>
#define N 100000
/* 判斷是否小數(shù)*/
int isfloat(char x[])
{
int i;
for(i=0;i<strlen(x);i++)
if(x[i]=='.')
return 1;
return 0;
}
/* 對(duì)輸入的字符串進(jìn)行轉(zhuǎn)變 */
void turn(char x[])
{
int i,k;
char *p;
p=x;
/* 去掉前面的0 */
while (*p == '0')
p++;
k=0;
/* 重新賦值 */
for(i=0;p[i]!='\0';i++)
x[k++]=p[i];
x[k]='\0';
/* 判斷是否小數(shù) */
if(!isfloat(x))
return;
/* 從后面去0 */
p=x+k-1;
while(*p=='0')
p--;
*(p+1)='\0';
/* 去掉小數(shù)點(diǎn)*/
if(*p=='.')
*p='\0';
}
int main()
{
char a[N],b[N];
while (scanf("%s%s",a,b) != EOF)
{
turn(a);
turn(b);
if(!strcmp(a,b))
printf("YES\n");
else
printf("NO\n");
}
}