HDU2054(大数的处理)
这一题很有意思,没有用到任何的算法,主要需要考虑各种情况。如两个数的范围长度可能在10000位以上,另外使用字符串存储时需要注意不能直接判断两个字符串是否相等,因为题目没说两个数是不是整数,如两个数分别是10.0与10.00如果直接比较两个字符串是否相等,就WA。有了上面的思路程序也就好实现了。
#include<stdio.h>#include<string>//字符串s中是否包含字符cbool Search(char s[],int n,char c){ for(int i=0;i<n;i++){ if(s[i]==c)return true; } return false;}//去除尾所有的0int trim(char s[],int n){ for(int i=n-1;i>=0;i--){ if(s[i]=='0')n--; else break; } return n;}int main(){ char s1[100010],s2[100010]; while(scanf("%s%s",s1,s2)!=EOF){ int len1=strlen(s1); int len2=strlen(s2); //读取两个数,放入到数组中。 if(Search(s1,len1,'.')){ //如果数中包括小数点,如123.10则去除尾部的0便于处理 len1=trim(s1,len1); } if(Search(s2,len2,'.')){ len2=trim(s2,len2); } //要考虑10=10.的情况 if(s1[len1-1]=='.')len1--; if(s2[len2-1]=='.')len2--; int i=0; bool flag=true; if(len1!=len2){ //两个数的长度不一致,直接可以确定为不相等。 flag=false; } else{ while(i<len1){ if(s1[i]!=s2[i]){ flag=false; break; } i++; } } if(flag){ printf("YES\n"); } else{ printf("NO\n"); } } return 0;}- 1楼dahlwuyn昨天 13:47
- 既然是cpp,你这个可以直接用C++里的String类来操作;另外,能不能增加别的功能,比如说大数的加、减、乘、除、幂等运算,如何优化精简
- Re: mxway昨天 14:17
- 回复dahlwuynn非常感谢你的建议,受用了。