越简单粗暴的话越多坑 - -
给你两个数字,判断是否相等。要发挥想象力想象各种丧心病狂的数据:
100.0 00100
.0 000.00
1.010 00.010
不知道有多少位 - - 看了讨论版..至少十万位 ..这尼玛的丧心病狂
本来思路挺好的,后面一个地方漏了等于号心情严重被打击,代码越写越挫 ..
一开始,想了四个函数。
1)去掉前面‘ 0 ’的函数。因为 000001 和 1 是相等的。00000.2 和 .2是相等的。
2)判断是否有小数点。区分整数与浮点数的比较(从这里思路就开始挫了 = = 看他们的精简代码二十行搞定,虐心)
3)去掉后面无用的‘ 0 ’。 1.2000 与 1.2是相等的。
4)经过上面一系列操作之后的数组的最大下标值(一开始写忘记了..看函数名记成真实长度...以后函数名字要取好)
因为有上万位数,所以要考虑时间消耗,首选用 C ,还有一个小函数做了内联,0ms AC了。
这里要有掌声,稍微赞一下代码写挫了但是还是机智的 0ms 的我。
主函数承担了,最终的两个数的判断。用了最挫的一个一个比较....啊,头痛,让我休息一下,估计能想出更好的办法。
这里要补一下关于 cstring 头文件的几个主要函数:
char *strstr ( char *a,char *b) : 找出 b 字符串 在 a 字符串出现第一次出现的位置(不包括\0),返回该位置指针,无则返回NULL
char *strchr ( char *a, int ch ) :找出 a 字符串第一次出现字符 ch 的位置,返回该位置指针,无则返回NULL
一开始忘记了 strchr ( char *a,int ch) 函数啊!!
自己写了一个又重推了!!!!我华丽丽的时间啊 = =
结果还是没用那个。键盘上一口血啊。
无线鼠标坏了,用了触控板快死了我得去洗洗睡了。以下AC代码。(伐开森,要鼠标 (喂!
#include <cstdio>
#include <cstring>
//#include <cctype>
//#include <cstdlib>//qsort
//#include <algorithm>//sort reverse
#define FOR(i,n) for(int i = 0; i<n ; ++i)
const int MAXSIZE = 100000;
char BigOne[MAXSIZE];
char BigTwo[MAXSIZE];
const char Zero[1]={'0'};
/* qsort --> int cmp( const void *,const void *) */
void FrontZero( char *b )
{
int len = strlen(b);
int n;
int i = 0;
for( n = 0 ; b[n] =='0' && n<len;++n);
if( n==len )strcpy(b,Zero);//0000000 --> 0
else
while( n<len && (n!=0) ) // 00000.22 --> .22
{
b[i++] = b[n];
b[n++] =' ';
}
}
int RadixPoint( char *b)
{
if(strcmp(b,Zero)==0)return 0;
else
{
int n = strlen(b);
FOR(i,n)
{
if( b[i]=='.' )return 1;
}
return 0;
}
}
//有小数点的话去除尾部多余的零
void DePoint( char * p )
{
int len = strlen(p)-1;
int i;
for(i=len ; i>=0;--i)
{
if(p[i]=='0'||p[i]==' ')p[i]=' ';
else break;
}
if(p[i]=='.')p[i]=' ';
}
/*
时间消耗:
输入数据 cin 30ms
scanf("%s%s", ) 15ms
长度函数 inline 内联 0ms
*/
inline int RealLenth(char *b)//前面塞的空格不算长度
{
int len = strlen(b)-1;
for( ; b[len]==' ';--len);
return len;
}
int main()
{
// cout<<strcmp("0.22 ","0.22000")<<endl;
while( scanf("%s%s",BigOne,BigTwo)!=EOF )
{
// 00100.00 001000 000100.01 000000
FrontZero(BigOne);
FrontZero(BigTwo);
//是否有小数点
if( RadixPoint(BigOne) )DePoint(BigOne);
if( RadixPoint(BigTwo) )DePoint(BigTwo);
int Olen = RealLenth(BigOne);
int Tlen = RealLenth(BigTwo);
bool flag = true ;
int n = Olen > Tlen ? Olen :Tlen;
for( int i = 0 ;i <=n ;++i )
{
if( BigOne[i]!=BigTwo[i] )
{
flag=false;
break;
}
}
if( flag==true )puts("YES");
else puts("NO");
}
return 0;
}