題目:
2054題
這道題看起來很簡單 甚至不用想就會編出以下代碼:
#include<stdio.h>
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b))
{
if(a==b)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
果斷wrong 哈哈哈~~~Q蚓!囚玫!
答案肯定不是那么簡單的喧锦,原因就是高精度問題,如果是超長的數(shù)列呢抓督?燃少??int铃在、long long阵具、double都放不下呢碍遍?所以這道題要用高精度的思想來做→→→開數(shù)組
開數(shù)組一定要考慮下面的問題:
①5.00000 與 5 一個有小數(shù)點一個沒有
②5.00 與 5000 字符串的長度都一樣 但是2個數(shù)不一樣
方法也有2個:
①去0去小數(shù)點
②裝入新數(shù)組
#include<stdio.h>
#include<string.h>
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<stdio.h>
#include<string.h>
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數(shù)組中是否有"."(小數(shù)點)
char *strstr(const char *str1, const char *str2);
include<string.h>
找出str2字符串在str1字符串中第一次出現(xiàn)的位置(不包括str2的串結(jié)束符)阳液。返回該位置的指針怕敬,如找不到,返回空指針帘皿。