题目要求,输入两个数字,判断两个数字是否相等,一开始以为是弱智题目,但怎么样都AC不了,才意识到杭电OJ的输入的数字可能已经超过了计算机数字所能容纳的最大限度,按照目前的水平,我还不会使用链表来进行长整数的计算,只能用字符数组来进行数字存储。
做题思路:用比较字符串是否相等的方法来判断两个数字是否相等
出现的需要解决的问题:
(1)1.000000000 与1
出现原因:在字符串中,1.000000000与1是不相等的
解决方法:步骤一、清掉无用的0,从数组倒数第一位开始,如果是'0',就将其赋值为0【注意‘0’与0是不一样的】
strlen是不会将‘\0’计入长度之内,因而清理掉无用的'0',可以将1.00000000还原为1。
步骤二、可以看出1.0000000如果清理掉'0'后,会变成【1.】,因而我们还需要对无用小数点进行处理。
代码如下:
#include
#include
void killzero(char o[100000])//杀掉'0'的函数。
{
int lon = strlen(o)-1;//记录最后的数字的坐标
if (strchr(o, '.'))//寻找小数点是否存在,如果存在,就有可能存在无用的'0',如果不存在,那所有在后面的'0'都是有 用的。
{
while (o[lon] == '0'&&lon >= 0)
{
o[lon] = 0;
lon--;
}
}
if(o[lon]=='.') o[lon] = 0;
}
int main(void)
{
char a[100000];//我曾经将这个数组的大小限定为10000,提交时会显示运行错误,猜测是杭电会输入 超过一万位的数字,设定成十万位即可满足要求。
char b[100000];
int i,flag,lon;
while (scanf("%s %s", &a, &b) != EOF)
{
killzero(a);
killzero(b);
if(strcmp(a,b)==0) printf("YES\n");
else printf("NO\n");
}
}