104 A == B ?

问题描述 :

给你两个非负实数A和B,如果A等于B,输出 "YES", 否则输出"NO"

输入说明 :

第一行N,表示有N组测试数据。

以下N行,每行两个非负实数 A和B。每个实数不超过1000位,且可能在前面和后面有0存在。

 

输出说明 :

对于每组测试数据,如果A和B相等则输出 "YES", 否则输出 "NO"。

每组测试数据占一行,两组测试数据之间无空行。行首与行尾均无空格。

 

输入范例 :

2
100.0 00100
0100.1234576 00000000100.123457

输出范例 :

YES
NO

 

思想:小数点前后的数字分别获取,小数点后的数把末尾的0除去,然后判断两个数是否都相等。

#include <stdio.h>
#include <string.h>

int main()
{
    int i, j, k, l;
    int num;
    char s[1000];
    scanf("%d", &num);
    for (l = 0; l < num; l++)
    {
        if (l == 0)
        {
            getchar(); //首行吸收一下换行符
        }
        gets(s);
        int start1 = 0; // 1数非0的起始位置
        int start2 = 0; // 2数非0的起始位置
        int num1 = 0;   // 1数整数部分
        int num1s = 0;  // 1数小数部分
        int num2 = 0;   // 2数整数部分
        int num2s = 0;  // 2数小数部分
        int dot1 = 0;   // 1数小数点
        int dot2 = 0;   // 2数小数点
        for (i = 0; i < strlen(s); i++)
        {
            if (s[i] != ' ') //空格表示进入2数部分
            {
                if (dot1 != 0)//进入小数部分
                { 
                    num1s = num1s * 10 + s[i] - 48;
                }
                else if (start1)
                {
                    if (s[i] == '.')
                    {
                        dot1 = i;
                    }
                    else
                    {
                        num1 = num1 * 10 + s[i] - 48;
                    }
                }
                else
                {
                    if (s[i] == '0')  //未进入整数部分 前面的0舍去
                    {
                        continue;
                    }
                    else
                    {
                        start1 = 1;
                        num1 = num1 + s[i] - 48;
                    }
                }
            }
            else
            {
                break;
            }
        }
        j = 0;
        for (i++; i < strlen(s); i++, j++)
        {
            if (dot2 != 0)//进入小数部分
            { 
                num2s = num2s * 10 + s[i] - 48;
            }
            else if (start2)
            {
                if (s[i] == '.')
                {
                    dot2 = j;
                }
                else
                {
                    num2 = num2 * 10 + s[i] - 48;
                }
            }
            else
            {
                if (s[i] == '0')  //未进入整数部分 前面的0舍去
                {
                    continue;
                }
                else
                {
                    start2 = 1;
                    num2 = num2 + s[i] - 48;
                }
            }
        }
        while (num1s % 10 == 0 && num1s != 0)  //由于是以整数保存的 除去小数部分的0,避免1.100和1.10后面保存的100和10不等的情况出现,都化成1再比较
        {
            num1s /= 10;
        }
        while (num2s % 10 == 0 && num2s != 0)
        {
            num2s /= 10;
        }
        if (num1 == num2 && num1s == num2s)
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
    }
}

 

posted @ 2022-03-12 22:07  梦想是能睡八小时的猪  阅读(65)  评论(0)    收藏  举报