HDU 2054

題目要求:

比較兩個數(shù)是否相等

做題思路:

剛開始沒多想直接試了一下簡單的strcmp,后來看來討論才發(fā)現(xiàn)要考慮的因素有很多:

特殊情況:
輸入數(shù)據(jù)是1.000和0001這種情況,甚至0001.000
這時候需要將多余的0去掉,通過判斷是整數(shù)還是小數(shù),整數(shù)只需去掉前面的0,小數(shù)兩邊的0都要去掉。
數(shù)據(jù)調(diào)試案例:
0123 123(去掉前面的0)
00123.100 123.1(去掉兩邊的0)
123.000 123(去掉兩邊的0和小數(shù)點)

#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;
}
/* 對輸入的字符串進行轉(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ù)點*/
    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");
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容