杭电acm2054java,杭电ACM-2054(A==B?)

博客探讨了在处理可能超出常规整型或浮点型范围的数列时,如何使用高精度思想和数组来实现正确输入输出。文章通过示例代码讲解了去除0和小数点的方法,并介绍了strstr函数在查找字符串特定子串中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

33e1c526adb4

2054题

这道题看起来很简单 甚至不用想就会编出以下代码:

#include

int main()

{

int a,b;

while(~scanf("%d%d",&a,&b))

{

if(a==b)

printf("YES\n");

else

printf("NO\n");

}

return 0;

}

果断wrong 哈哈哈~~~!!!

答案肯定不是那么简单的,原因就是高精度问题,如果是超长的数列呢???int、long long、double都放不下呢?所以这道题要用高精度的思想来做→→→开数组

开数组一定要考虑下面的问题:

①5.00000 与 5 一个有小数点一个没有

②5.00 与 5000 字符串的长度都一样 但是2个数不一样

方法也有2个:

①去0去小数点

②装入新数组

#include

#include

char a[100000],b[100000];

void change(char s[])

{

int len,i;

len=strlen(s);

if(strstr(s,"."))

{

for(i=len-1;s[i]=='0';i--)

{

s[i]='\0';

len--;

}

}

if(s[len-1]=='.')

s[len-1]='\0';

}

int main()

{

while(~scanf("%s%s",&a,&b))

{

change(a);

change(b);

if(strcmp(a,b)==0)

printf("YES\n");

else

printf("NO\n");

}

return 0;

}

AND——————————————————————————————————————

#include

#include

char a[100000],b[100000],c[100000],d[100000];

int i,k,len1,len2;

int main()

{

while(~scanf("%s%s",&a,&b))

{

len1=strlen(a);

len2=strlen(b);

k=len1;

for(i=len1-1;a[i]=='0';i--);

if(strstr(a,".")==0)

{

i=len1-1;

}

for(k=0;k<=i;k++)

c[k]=a[k];

if(c[k-1]=='.')

c[k-1]='\0';

else

c[k]='\0';

k=len2;

for(i=len2-1;b[i]=='0';i--);

if(strstr(b,".")==0)

{

i=len2-1;

}

for(k=0;k<=i;k++)

d[k]=b[k];

if(d[k-1]=='.')

d[k-1]='\0';

else

d[k]='\0';

if(strcmp(c,d)==0)

printf("YES\n");

else

printf("NO\n");

}

return 0;

}

然后就是一个新学的知识:

strstr(str,"n");

if(strstr(a,".")==0)

判断a数组中是否有"."(小数点)

char *strstr(const char *str1, const char *str2);

include

找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值