首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

HDU2054(大数的处置)

2013-03-25 
HDU2054(大数的处理)这一题很有意思,没有用到任何的算法,主要需要考虑各种情况。如两个数的范围长度可能在1

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非常感谢你的建议,受用了。

热点排行