杭电HDOJ--ACM1002(JAVA解题,运用BigInteger)(自定义MBigInteger 简单实现大数处理----完善后可以实现百亿计算器)
转载声明:原文转自http://www.cnblogs.com/xiezie/p/5501901.html
import java.util.*; import java.io.*;
import java.math.BigInteger; public class Main{ public static void main(String[] arg){
Scanner scan = new Scanner(new BufferedInputStream(System.in));
int n = scan.nextInt();
int l = n;
while(n--!=0){
BigInteger integer = new BigInteger(scan.next());
BigInteger integer2 = new BigInteger(scan.next());
System.out.println("Case " + (l-n+1) + ":");
System.out.println(integer + " + " + integer2 + " = " +integer.add(integer2));
if(n!=1){
System.out.println();
}
}
scan.close();
}
}
使用自定义大数处理类MBigInteger实现:
主要思路是将输入的数字作为字符串传入自定义类中,处理每个符号的计算。
实现中只处理的正整数的情况。
沿着这个思路 结合正则表达式 并完善各种BUG,可以实现百亿计算器。
以下是实现代码:
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] arg){
Main m = new Main();
Scanner scan = new Scanner(new BufferedInputStream(System.in));
int n = scan.nextInt();
int l = n;
while(n--!=0){
MBigInteger integer = m.new MBigInteger(scan.next());
MBigInteger integer2 = m.new MBigInteger(scan.next());
System.out.println("Case " + (l-n) + ":");
System.out.println(integer + " + " + integer2 + " = " + integer.add(integer2));
if(n!=0){
System.out.println();
}
}
scan.close();
}
class MBigInteger{
private MBigInteger(){};
private String s;
public MBigInteger(String s){
this.setS(s);
}
public MBigInteger add(MBigInteger integer){//只处理正整数
char[] ch1 = getS().toCharArray();
char[] ch2 = integer.getS().toCharArray();
int len = ch1.length;
int len2 = ch2.length;
int n = len;
char[] resultChars;
if(len<len2){
n = len2;
}
resultChars = new char[ n ];
boolean overTen = false;
int ans;
while(len!=0&&len2!= 0){
int o = 0;
if(overTen){
o++;
}
ans = getIntValueAt(ch1, len-1) + getIntValueAt(ch2, len2-1) + o;
if(ans > 9){
overTen = true;
}else{
overTen = false;
}
resultChars[--n] = (char) (ans%10 + '0');
len -- ;
len2 -- ;
}
while(len--!=0){
int o = 0;
if(overTen){
o++;
}
ans = getIntValueAt(ch1, len) + o;
if(ans > 9){
overTen = true;
}else{
overTen = false;
}
resultChars[--n] = (char) (ans%10 + '0');
}
while(len2--!=0){
int o = 0 ;
if(overTen){
o++;
}
ans = getIntValueAt(ch2, len2) + o;
if(ans > 9){
overTen = true;
}else{
overTen = false;
}
resultChars[--n] = (char) (ans%10 + '0');
}
if(overTen){
setS("1".concat(String.valueOf(resultChars)));
}else{
setS(String.valueOf(resultChars));
}
return this;
}
@Override
public String toString() {
return this.getS();
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public int getIntValueAt(char[] c,int i){
return c[i]-'0';
}
}
}
杭电HDOJ--ACM1002(JAVA解题,运用BigInteger)(自定义MBigInteger 简单实现大数处理----完善后可以实现百亿计算器)的更多相关文章
- 杭电hdoj题目分类
HDOJ 题目分类 //分类不是绝对的 //"*" 表示好题,需要多次回味 //"?"表示结论是正确的,但还停留在模块阶 段,需要理解,证明. //简单题看到就 ...
- java面试题--实现一个百亿的计算器
看了网上很多说法,没有具体把它实现的,我试了一下其实还是比较简单的. 直接看代码: package com.infomorrow; import java.math.BigInteger; impor ...
- 杭电oj 4004---The Frog Games java解法
import java.util.Arrays; import java.util.Scanner; //杭电oj 4004 //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小, // ...
- 杭电oj————2057(java)
question:A+ B again 思路:额,没啥思路/捂脸,用java的long包里的方法,很简单,只是有几次WA,有几点要注意一下 注意:如果数字有加号要删除掉,这里用到了正则表达式“\\+” ...
- 杭电oj2093题,Java版
杭电2093题,Java版 虽然不难但很麻烦. import java.util.ArrayList; import java.util.Collections; import java.util.L ...
- 杭电dp题集,附链接还有解题报告!!!!!
Robberies 点击打开链接 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和- 把状态转移方程写成了f ...
- 杭电OJ1789、南阳OJ236(贪心法)解题报告
杭电OJ1789http://acm.hdu.edu.cn/showproblem.php?pid=1789 南阳OJ236http://59.69.128.203/JudgeOnline/probl ...
- 杭电 OJ 提交代码需要注意的问题
杭电acm 提交代码需要注意的问题 1. 用 Java 的时候类名请用 Main 2. Java 提交出现 PE 的可能原因有 1) 最基本的错误是空格问题,比如注意每行的末尾是否输出空格 2) 用 ...
- 杭电 HDU ACM 2795 Billboard(线段树伪装版)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- linux sed命令学习
. Sed简介 . 定址 . Sed命令 . 选项 . 元字符集 . 实例 . 脚本 . 小技巧 . Sed简介 sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中, ...
- vim emmet配置
http://nerd-is.in/2013-12/learning-vim-again-1-install-vundle/ http://nerd-is.in/2013-12/learn-vim-a ...
- 在Linux上安装Memcached服务
下载并安装Memcache服务器端服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz ...
- ECSHOP安装或使用中提示Strict Standards: Non-static method cls_image:
随着ECSHOP的不断发展,越来越多的人成为了ECSHOP的忠实粉丝.由于每个人的服务器环境和配置都不完全相同,所以ECSHOP也接二连三的爆出了各种各样的错误信息.相信不少新手朋友在ECSHOP安装 ...
- oracle数据库的建表,删除字段,添加字段,修改字段,修改字段......
1. 使用oracle创建一张表: SQL> create table loginuser( id ,), username ), password ), email ), descriable ...
- treeview 点击时选中节点
private void tv_WebList_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { Point clickPo ...
- HTTP Response Spliting 防范策略研究
目录0x1:HTTP请求的格式0x2:HTTP请求的方法0x3:HTTP响应的格式0x4:HTTP响应拆分攻击0x5:防范的方法 HTTP请求的格式 客户端所提出的HTTP请求包含下列信息:(1)请求 ...
- uva 1476 - Error Curves
对x的坐标三分: #include<cstdio> #include<algorithm> #define maxn 10009 using namespace std; do ...
- 解析rss和atom文件出现乱码问题
try { String xmlString = new String(response.data, Charset.forName("UTF-8")); XmlPullParse ...
- 【HDOJ】2086 A1 = ?
数学题,首先推导出2*sum{c1,c2...cn} = (An+1-An) - (A1-A0),在将n个该式相加,可以推导出(n+1)*A1=An+1+n*A0-2*sum{sum{c1,c2... ...
