<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19px; background-color: rgb(245, 245, 245);">转自:http://hi.baidu.com/czyuan_acm/blog/item/d0bf7a439d90d21b72f05d69.html</span>
1.如果要将一个大数以2进制形式读入 可以使用cin.nextBigInteger(2); 当然也可以使用其他进制方式读入; 2.如果要将一个大数转换成其他进制形式的字符串 使用cin.toString(2);//将它转换成2进制表示的字符串 例程:POJ 2305 import java.io.*; import java.util.*; import java.math.*; public classMain { public static void main(String[] args) { int b; BigInteger p,m,ans; String str ; Scanner cin = new Scanner (new BufferedInputStream(System.in)); while(cin.hasNext()) { b=cin.nextInt(); if(b==0) break; p=cin.nextBigInteger(b); m=cin.nextBigInteger(b); ans=p.mod(m); str=ans.toString(b); System.out.println(str); } } }转载:http://blog.csdn.net/niushuai666/article/details/7433119
题目大意:
八进制小数转十进制小数。不能含有后导0
解题思路:
大数问题,JAVA果断水过。
去后导0的用地BigDecimal的stripTrailingZeros,然后使用toPlainString防止高精度数表示成科学计数法(意思就是转换成朴素的字符串)
import java.math.BigDecimal; import java.util.*; import java.math.*; import java.io.*; public class Main { public static void main(String[] args) { String a; BigDecimal eight = new BigDecimal(8); Scanner cin = new Scanner(System.in); while(cin.hasNext()) { a = cin.nextLine(); BigDecimal ans = new BigDecimal(0); BigDecimal temp = new BigDecimal(1); for(int i = 2; i < a.length(); ++i) { temp = temp.divide(eight); ans = ans.add(new BigDecimal(a.charAt(i) - '0').multiply(temp)); } System.out.println(a + " [8] = " + ans.stripTrailingZeros().toPlainString() + " [10]"); } } }
HDU-1753 大明A+B【大数相加】
解题思路:
大数相加问题,但是有三种情况:2个整数,1个整数1个小数,2个小数。
这就需要我们单独处理每种情况,而且这道题需要保证没有多余的前导0和后导0,刚开始想到简单了。结果到最后搞了150行才过。悲剧。
这道题的巧妙做法是:把每种情况都转换成2个小数来搞,这样就只有1种情况了。
JAVA则超级轻松水过啊!!!!!!!!150行和20行,郁闷啊。。。。
JAVA,你太强悍了。ORZ
去后导0的用地BigDecimal的stripTrailingZeros,然后使用toPlainString防止高精度数表示成科学计数法(意思就是转换成朴素的字符串)
import java.math.BigDecimal; import java.util.*; public class Main { public static void main(String[] args) { BigDecimal a, b, c; Scanner cin = new Scanner(System.in); while(cin.hasNext()) { a = cin.nextBigDecimal(); b = cin.nextBigDecimal(); c = a.add(b); if(c.compareTo(BigDecimal.ZERO) == 0) System.out.println("0"); else System.out.println(c.stripTrailingZeros().toPlainString()); } } }比较两个数的大小
- int flag = a.compareTo(b);
- if(flag == -1)
- System.out.println("a<b");
- else if(flag == 0)
- System.out.println("a==b");
- else
- System.out.println("a>b");
- }
高精度幂
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=155
代码如下:
import java.io.*; import java.math.BigDecimal; import java.util.*; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { BigDecimal ans = cin.nextBigDecimal(); int n = cin.nextInt(); String res = ans.pow(n).stripTrailingZeros().toPlainString(); //整数去掉小数点和后面的0 if(res.startsWith("0")) //去掉前导0 { res = res.substring(1); } System.out.println(res); } } }
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=524
解题思路:
JAVA果断水过,看别人用C++写了100+行,而且稠的很。。。
我的一共才20行,还有头文件什么的。。。
不得不说,JAVA高精度无敌啊。
import java.math.BigDecimal; import java.util.*; public class Main { public static void main(String[] args) { BigDecimal a, b, c; Scanner cin = new Scanner(System.in); while(cin.hasNext()) { a = cin.nextBigDecimal(); b = cin.nextBigDecimal(); c = a.subtract(b); if(c.compareTo(BigDecimal.ZERO) == 0) System.out.println("YES"); else System.out.println("NO"); } } }以上出第一个外均为转自:http://blog.csdn.net/niushuai666/article/category/929606
转载:http://blog.csdn.net/zhengnanlee/article/details/12575353
import java.math.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { Integer n; n = cin.nextInt(); long a[] = new long [1005]; BigInteger b[] = new BigInteger [1005]; BigInteger c[] = new BigInteger [1005]; long Maxx = 0; for(int i = 0; i < n; i++) { a[i] = cin.nextLong(); if(a[i]>Maxx) Maxx = a[i]; } int k = 0; for(int i = 0; i < n; i++) { if(a[i] == Maxx) continue; else { b[i] = BigInteger.valueOf(Maxx * a[i]); c[i] = BigInteger.valueOf(2 * (Maxx - a[i])); k = i; } } BigInteger t = BigInteger.ONE; for(int i = 0; i < n; i++) { if (a[i]==Maxx) continue; t = b[k].multiply(c[i]).gcd(b[i].multiply(c[k])); b[k] = b[k].multiply(c[i]).multiply(b[i].multiply(c[k])).divide(t); c[k] = c[k].multiply(c[i]); t = b[k].gcd(c[k]); b[k] = b[k].divide(t); c[k] = c[k].divide(t); } System.out.println(b[k]+" "+c[k]); } } }