转载声明:原文转自http://www.cnblogs.com/xiezie/p/5501901.html

 
 
JAVA解题:
 
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 简单实现大数处理----完善后可以实现百亿计算器)的更多相关文章

  1. 杭电hdoj题目分类

    HDOJ 题目分类 //分类不是绝对的 //"*" 表示好题,需要多次回味 //"?"表示结论是正确的,但还停留在模块阶 段,需要理解,证明. //简单题看到就 ...

  2. java面试题--实现一个百亿的计算器

    看了网上很多说法,没有具体把它实现的,我试了一下其实还是比较简单的. 直接看代码: package com.infomorrow; import java.math.BigInteger; impor ...

  3. 杭电oj 4004---The Frog Games java解法

    import java.util.Arrays; import java.util.Scanner; //杭电oj 4004 //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小, // ...

  4. 杭电oj————2057(java)

    question:A+ B again 思路:额,没啥思路/捂脸,用java的long包里的方法,很简单,只是有几次WA,有几点要注意一下 注意:如果数字有加号要删除掉,这里用到了正则表达式“\\+” ...

  5. 杭电oj2093题,Java版

    杭电2093题,Java版 虽然不难但很麻烦. import java.util.ArrayList; import java.util.Collections; import java.util.L ...

  6. 杭电dp题集,附链接还有解题报告!!!!!

    Robberies 点击打开链接 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱  最脑残的是把总的概率以为是抢N家银行的概率之和- 把状态转移方程写成了f ...

  7. 杭电OJ1789、南阳OJ236(贪心法)解题报告

    杭电OJ1789http://acm.hdu.edu.cn/showproblem.php?pid=1789 南阳OJ236http://59.69.128.203/JudgeOnline/probl ...

  8. 杭电 OJ 提交代码需要注意的问题

    杭电acm 提交代码需要注意的问题 1. 用 Java 的时候类名请用 Main 2. Java 提交出现 PE 的可能原因有 1) 最基本的错误是空格问题,比如注意每行的末尾是否输出空格 2) 用 ...

  9. 杭电 HDU ACM 2795 Billboard(线段树伪装版)

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. jersey post提交到 ContainerRequestFilter 而HttpServletRequest获取不到数据(转)

     jersey post提交到 ContainerRequestFilter 而HttpServletRequest获取不到数据 问题:在serverfilter request获取不到post提交的 ...

  2. stdout 编码 vim 删除左边,右边

    sys.stdout = codecs.getwriter('utf8')(sys.stdout) vimdic['kkkk'] = qqqqqdic['bbbb'] = aaaaaadic['kkk ...

  3. [转载]MongoDB 常用命令

    mongodb由C++编写,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理.关于它的一个最简洁描述为:scalable, high-performance, o ...

  4. Seven Python Tools All Data Scientists Should Know How to Use

    Seven Python Tools All Data Scientists Should Know How to Use If you’re an aspiring data scientist, ...

  5. Android开发之通过Intent启动其他App的Service

    在Android5.0以前可以通过隐式Intent方式启动其他App的Service,就跟Activity启动隐式Intent一样的. 但是在5.0以后,只能使用显示的Intent方式启动了. 启动其 ...

  6. MySQL导入数据非常慢的解决办法

    MySQL导出的SQL语句在导入时有可能会非常非常慢,经历过导入仅45万条记录,竟用了近3个小时.在导出时合理使用几个参数,可以大大加快导入的速度. -e 使用包括几个VALUES列表的多行INSER ...

  7. hadoop2.2原理: 序列化浅析

    序列化是指将一个对象编码成字节流,之后从字节流中重构对象: 为什么需要序列化? 答:用序列化接口可以将对象实例从存储到本地文件或者传送到网络的另一端的节点上: 序列化过程: 序列化的三种主要用途: 1 ...

  8. [转] POJ 题目分类

    转载来自http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,p ...

  9. sdfsdf

    http://www.cocoachina.com/bbs/read.php?tid-234704.html 选择工程->Build Settings -> Code Signing -& ...

  10. NSString 转换 float 的精度问题, 换double类型可以解决

    @"0.01" 转换成float时, 经常会变成  0.009999799 这种形式, 因为float类型无法精准保存, 系统会选一个接近的值来代替. 而double类型则可以有更 ...