HDU 2054 大数比较
2017-01-28 17:15
471 查看
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2054
A这个水题也没有什么意思,主要巩固前面Java大数类和一些方法的学习。
题目如果直接用Java.Biginteger.equals()方法的话会WA,在API说明里面,对于2.00,和2.0值相等,标度不等就不会匹配。
一个方法就是用前面学到的方法stripTrailingZeros(),这里面有个组件 [BigInteger, scale], 我理解的就是比如5000.0000,使用此组件生成的就是等于[50000000,4],右边的4就是科学计数法10的负次方,小数点左移位数4,使用stripTrailingZeros(),去BigInteger参数位的0,去几个零,右边标度减几,因为50000000要去七个0,4-3=-7,生成的[5,-3],也就是5E3,这就是去0原理吧。好像是?不过现在又有问题了?还在问别人,等弄懂了回来补充。
第二个方法是直接用compareTo()方法,在上篇比较大小的博客 http://blog.csdn.net/major_zhang/article/details/54748204 里面也说的很清楚了,对于2.00,2.0在字符串是返回大于等于1的。对于大整数比较当此 BigDecimal 在数字上小于、等于或大于
val 时,返回 -1、0 或 1。
C/C++版本:
A这个水题也没有什么意思,主要巩固前面Java大数类和一些方法的学习。
题目如果直接用Java.Biginteger.equals()方法的话会WA,在API说明里面,对于2.00,和2.0值相等,标度不等就不会匹配。
一个方法就是用前面学到的方法stripTrailingZeros(),这里面有个组件 [BigInteger, scale], 我理解的就是比如5000.0000,使用此组件生成的就是等于[50000000,4],右边的4就是科学计数法10的负次方,小数点左移位数4,使用stripTrailingZeros(),去BigInteger参数位的0,去几个零,右边标度减几,因为50000000要去七个0,4-3=-7,生成的[5,-3],也就是5E3,这就是去0原理吧。好像是?不过现在又有问题了?还在问别人,等弄懂了回来补充。
第二个方法是直接用compareTo()方法,在上篇比较大小的博客 http://blog.csdn.net/major_zhang/article/details/54748204 里面也说的很清楚了,对于2.00,2.0在字符串是返回大于等于1的。对于大整数比较当此 BigDecimal 在数字上小于、等于或大于
val 时,返回 -1、0 或 1。
import java.math.BigInteger; import java.util.Scanner; import java.math.BigDecimal; public class Main { public static void main(String args[]) { Scanner in = new Scanner(System.in); while(in.hasNext()){ BigDecimal a1,a2; a1 = in.nextBigDecimal(); a2 = in.nextBigDecimal(); int flag = a1.compareTo(a2); /** * a = a.stripTrailingZeros(); b = b.stripTrailingZeros(); if (a.equals(b)) { System.out.println("YES"); } else { System.out.println("NO"); } **/ if(flag==0) System.out.println("YES"); else { System.out.println("NO"); } } } }
C/C++版本:
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; char a[100000],b[100000]; void change(char s[]) { int i,len; len = strlen(s); if(strstr(s,"."))//含有小数点 { for(i = len-1; s[i] == '0'; i--)//去掉小数末尾的0 { s[i] = '\0'; len--; } } if(s[len-1] == '.') s[len-1] = '\0'; } int main() { while(scanf("%s%s",a,b)!=EOF) { change(a); change(b); /* cout<<"a:"<<a<<endl; cout<<"b:"<<b<<endl; */ if(strcmp(a,b)) printf("NO\n"); else printf("YES\n"); } return 0; }
相关文章推荐
- hdu 4523 威威猫系列故事——过生日(简单大数相加比较)
- HDU 1316(大数比较+二分)
- HDU 2054 字符串 比较两个数大小,忽略整数前面的0和小数最后的0
- HDU 2054 A==B? 大数
- HDU-2054-A == B?(Java大数BigDecimal)
- HDU 1316 How Many Fibs?(大数+字符串数字比较)
- HDU 2054 A==B? 大数
- 模拟_大数字符串(HDU_2054)
- hdu 2054 A == B ? (java大数)
- HDU 2054 A == B ?(Java大数用equal???C模拟也不能错过)
- hdu 2054 A == B ? (java大数)
- HDU 2054 判断大数是否相等
- hdu 4523 威威猫系列故事——过生日(简单大数相加比较)
- hdu 1042 N!(大数阶乘,转化为100000这样的比较大的进制)
- HDOJ-2054(大数比较)(A == B ?)
- HDU-1245 sort 快排、优先队列、hash比较
- hdu 1042 N! 大数
- HDU 1002 A + B Problem II 大数相加
- hdu java 大数 转载
- HDU 1002 A+BII大数