1864 - A-B Problem
时间限制 : 3 秒
内存限制 : 128 MB
A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。
现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢?
题目输入
有多组测试数据。每组数据包括两行,分别代表A和B。
它们的位数小于100,且每个数字前中可能包含+,- 号。
每个数字前面和后面都可能有多余的0。
题目输出
对于每组数据,输出一行。
如果A-B=0,输出YES,否则输出NO。
输入/输出样例
输入格式
1 1 1.0 2.0
输出格式
YES NO
C语言解答
#include <stdio.h> #include <string.h> char a[1000],b[1000]; int find_point(char s[]) // 判断是否为小数 { for(int i = 0;i < strlen(s); i++) { if(s[i] == '.') return 1; } return 0; } void del_zero(char s[]) { int len,i,count; if(find_point(s)) { len = strlen(s); for(i = len -1; i >= 0; i--) // 除去小数后面的0 { if(s[i] == '0') s[i] = '\0'; else break; } len = strlen(s) -1; if(s[len] == '.') s[len] = '\0'; } if(s[0] == '+') // 符号为正数情况 { len = strlen(s); count = 1; for(i = 1; i < len; i++) { if(s[i] == '0'&&s[i+1] != '\0') count++; else break; } for(i = 0; i < len - count; i++) { s[i] = s[i+count]; } s[i] = '\0'; } else if(s[0] == '-') //符号为负数的情况 { len = strlen(s); count = 0; for(i = 1; i < len; i++) { if(s[i] == '0'&&s[i+1] != '\0') count++; else break; } for(i = 1; i < len -count; i++) { s[i] = s[i+count]; } s[i] = '\0'; if(s[0] == '-'&&s[1] == '0') { s[0] = '0'; s[1] = '\0'; } } else //没有符号的情况 { len = strlen(s); count = 0; for(i = 0; i < len; i++) { if(s[i] == '0'&&s[i+1] != '\0') count++; else break; } for(i = 0; i < len - count; i++) { s[i] = s[i+count]; } s[i] = '\0'; } } int main() { while(scanf("%s%s",&a,&b) != EOF) { del_zero(a); del_zero(b); printf("%s\n",strcmp(a,b)?"NO":"YES"); } return 0; }
Java解答
import java.util.Scanner; import java.math.BigDecimal; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ BigDecimal A=sc.nextBigDecimal(); BigDecimal B=sc.nextBigDecimal(); BigDecimal C=A.subtract(B); if(C.compareTo(BigDecimal.ZERO) == 0){ System.out.println("YES"); }else{ System.out.println("NO"); } } } }