A-B Problem
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
- 描述
-
A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。
现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢?
题目与HDOJ的2054 A == B ? 题十分相似,但增加了对前导零的判断,及对正负数的判断,测试数据也比较严格。WA了七遍,终于AC了。
自己写的特殊测试数据:-0000.0000 0 +0.000 -0.00 2000.00 2000 -2000.00 2000.00
100000.00100 100000.01000 -1000.0 -1000.00 -00000.01 -.1 +.1 00000.01
+.1 0.1
具体题解及代码如下:
#include<stdio.h> #include<string.h> char str1[110],str2[110]; void count(char str[])//此函数对两个字符串进行第一步处理 { int len,i; len=strlen(str); if(strchr(str,'.'))//后导零和没有具体小数位的小数点 { for(i=len-1;str[i]=='0';i--) str[i]='\0'; if(str[i]=='.') str[i]='\0'; } if(str[0]=='0'||str[0]=='+')//去除正号和前导零 { while(str[0]=='0'||str[0]=='+') { for(i=0;i<len;i++) str[i]=str[i+1]; str[len-1]='\0'; len--; } } } void count2(char str[])//在一个数为零或者两个数都是负数的时候去除负号及前导零 { int len,i; len=strlen(str); while(str[0]=='0'||str[0]=='-') { for(i=0;i<len;i++) str[i]=str[i+1]; str[len-1]='\0'; len--; } } int main() { while(scanf("%s%s",str1,str2)!=EOF) { count(str1); count(str2); if(str1[0]!='-'||str2[0]!='-')//一正一负或者两个数都为正的情况 { if(strcmp(str1,"\0")==0||strcmp(str2,"\0")==0)//其中一个数为零的情况,看带负号的数是否值也为零 { count2(str1);//***** count2(str2); if(strcmp(str1,str2)) printf("NO\n"); else printf("YES\n"); } else//没有出现值为零的情况 { if(strcmp(str1,str2)) printf("NO\n"); else printf("YES\n"); } } else//两个都是负数的情况 { count2(str1);//***** count2(str2); if(strcmp(str1,str2)) printf("NO\n"); else printf("YES\n"); } } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。