您的位置:首页 > 其它

HDU2054(大数的处理)

2013-03-21 11:24 176 查看
这一题很有意思,没有用到任何的算法,主要需要考虑各种情况。如两个数的范围长度可能在10000位以上,另外使用字符串存储时需要注意不能直接判断两个字符串是否相等,因为题目没说两个数是不是整数,如两个数分别是10.0与10.00如果直接比较两个字符串是否相等,就WA。有了上面的思路程序也就好实现了。

#include<stdio.h>
#include<string>
//字符串s中是否包含字符c
bool Search(char s[],int n,char c){
for(int i=0;i<n;i++){
if(s[i]==c)return true;
}
return false;
}
//去除尾所有的0
int 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: