<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]);
}
}
}