HDU-2054 A==B?
2014-07-12 23:25
246 查看
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
越简单粗暴的话越多坑 - -
给你两个数字,判断是否相等。要发挥想象力想象各种丧心病狂的数据:
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代码。(伐开森,要鼠标 (喂!
越简单粗暴的话越多坑 - -
给你两个数字,判断是否相等。要发挥想象力想象各种丧心病狂的数据:
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 =='0' && n<len;++n); if( n==len )strcpy(b,Zero);//0000000 --> 0 else while( n<len && (n!=0) ) // 00000.22 --> .22 { b[i++] = b ; 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; }
相关文章推荐
- hdu 2054 A == B ? (java)
- HDU 2054 A==B? 大数
- HDU 2054 A == B ?
- hdu 2054 A == B ? (java大数)
- hdu 2054
- HDU 2054 A==B?
- hdu 2054 A == B ? (java)
- HDU 2054 A == B ?
- 大数--HDU 2054 A==B?(java)
- hdu 2054A == B ?
- HDU 2054
- HDU——2054 A == B ?
- HDU 2054 大数比较
- HDU 2054 A == B?
- hdu 2054 A==B?
- HDU 2054 A == B ?
- HDU 2053a/b + c/d 2054 又见gcd
- HDU 2054 A == B ?(找小数点)
- hdu 2054
- hdu 2054 A == B ? 坑人的题目