关于java对于大数处理的相关程序和用法
<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]");
}
}
}
解题思路:
大数相加问题,但是有三种情况: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
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]);
}
}
}
关于java对于大数处理的相关程序和用法的更多相关文章
- Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法
Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类 的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正 ...
- 使用 Java 开发兼容 IPv6 的网络应用程序
根据现有 IPv4 地址的部署速度,剩余的地址将在 10 到 20 年被使用殆尽.因此网络逐渐从 IPv4 向 IPv6 转换是不可避免的,相应的各种网络应用程序都将支持 IPv6.对于 Java,从 ...
- # 2016-2017-2 20155319 《Java程序设计》实验四Android程序开发实验报告
2016-2017-2 20155319 <Java程序设计>实验四Android程序开发实验报告 实验一 实验内容 Android Stuidio的安装测试: 参考<Java和An ...
- Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战
Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品 ...
- HDU 5686 斐波那契数列、Java求大数
原题:http://acm.hdu.edu.cn/showproblem.php?pid=5686 当我们要求f[n]时,可以考虑为前n-1个1的情况有加了一个1. 此时有两种情况:当不适用第n个1进 ...
- 运行easy_install安装python相关程序时提示failed to create process
运行easy_install安装python相关程序时提示failed to create process,因为安装了两个python,卸载了的那个目录没删除,删除了另外的python目录后这个问题就 ...
- 基于DCMTK的DICOM相关程序编写攻略
2008年09月10日 星期三 15:35 基于DCMTK的DICOM相关程序编写攻略 前言: 由于现在的医学影像设备的图像存储和传输正在逐渐向DICOM标准靠拢,在我们进行医学图像处理的过程中,经常 ...
- Java BigInteger(大数,ACM比赛专用)
用c或者C++处理大数比较麻烦,于是决心学习一下JAVA中大数运算. 先下载一个eclipse,具体的用法去问度娘吧 JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮 ...
- Java的大数操作分为BigInteger和BigDecimal
Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 pack ...
随机推荐
- ORACLE 如何查看存储过程的定义
ORACLE 如何查看存储过程的定义 相关的数据字典 USER_SOURCE 用户的存储过程.函数的源代码字典 DBA_SOURCE 整个系统所有用户的存储过程.函数的源代码字典 ALL_SOUR ...
- 转】MYSQL性能调优与架构设计之select count(*)的思考
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/5/ 感谢! Posted: Feb 7, 2013 Tag ...
- [转]Windows Azure入门教学系列 (六):使用Table Storage
本文转自:http://blogs.msdn.com/b/azchina/archive/2010/03/11/windows-azure-table-storage.aspx 本文是Windows ...
- NSoup获取网页源代码
NSoup是JSoup的Net移植版本.使用方法基本一致. 如果项目涉及HTML的处理,强烈推荐NSoup,毕竟字符串截断太苦逼了. 下载地址:http://nsoup.codeplex.com/ # ...
- .net 环境下c# 通信
.net环境下通信主要掌握 通信协议(UDP&TCP). 网络抓包工具().:使用方法 点对点通信,IP组播,广播通信 c#中结构体转为字节流方式 c#结构体与c++结构体转换对应关系 开源的 ...
- String的用法——判断功能
package cn.itcast_03; /* String的判断功能: 1.boolean equals(Object obj):字符串的内容是否相同,区分大小写 2.boolean equals ...
- 维控PLC与电流变送器modbus通讯获取电流变送器数据
2018-09-2319:28:01 今天本来要用单片机来做这个项目的,但是失败了.... 所以我又拿出了PLC来搞,也是相当之复杂,查了很多资料终于做出而来了. 今天还有事,赶紧临时备份总结一波
- git ---回到过去
git命令回顾 git checkout /git reset -git reset HEAD~ //~代表回滚到第几个版本.. 有多个的话可以在~后面加个数字 git reset --mixe ...
- install nginx error
the error info : the HTTP gzip module requires the zlib library.You can either disable the module by ...
- hibernate4+spring4+struts2的Maven中的pom.xml文件的配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...