转载声明:原文转自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. python连接zookeeper的日志问题

    用python连接zookeeper时,在终端里,一直会有zookeeper的日志冒出来,这样会很烦. -- ::,:(: Exceeded deadline by 11ms 解决方法是在连接后设置一 ...

  2. 使用Result代替ResultSet作为方法返回值

    在开发过程中,我们不能将ResultSet对象作为方法的返回值,因为Connection连接一旦关闭,在此连接上的会话和在会话上的结果集也将会自动关闭,而Result对象则不会发生这种现象,所以在查询 ...

  3. 正则表达式中的\n

    搜索文件中的字符,希望每次从每行的开始进行匹配. 所以在表达式开头加了\n 结果发现怎么都匹配不了. string regEx = @"\n\d*\s*!\s*TESTNAME” 最后,偶然 ...

  4. U盘、移动硬盘提示格式化的处理

    移动硬盘突然打不开了,一点击就提示要求格式化,这种问题本人亲历,现已解决,千万别格式化,千万别格式化,用系统自带磁盘恢复 CHKDSK命令即可解决此问题 方法/步骤 1.在开始菜单找到“运行”窗口,也 ...

  5. spring framework 各版本源码下载地址

    现在spring的源码下载地址真是不好找,这次终于找到了.记录一下,以帮助需要的朋友. https://github.com/spring-projects/spring-framework/tags ...

  6. [转]关于MYSQL Innodb 锁行还是锁表

    关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况.为什么呢?先看一下这篇文章. 目时由于业务逻辑的需要,必须对数 ...

  7. .NET事件的指导原则

    C#允许编写所需的各种类型的事件.但是,为了与.NET Framwork的组件相兼容,开发人员必须遵循微软为此建立的一系列指导原则.这些指导原则的核心是,事件处理程序必须拥有两个参数.第一个参数是一个 ...

  8. ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER004_同步显示歌词

    一.流程分析 1.点击播放按钮,会根据lrc名调用LrcProcessor的process()分析歌词文件,得到时间队列和歌词队列 2.new一个hander,把时间队列和歌词队列传给自定义的线程类U ...

  9. Android USB Host与HID通讯 (二)

    不好意思,从上一篇到现在确实比较忙,中间又外出了一段时间,虽然也上LOFTER,或者看到一些朋友QQ上加我,给我发信息询问,有些看到了有些可能没看到,偶尔回复了一两个,也不咋的详细,在此我想说,一方面 ...

  10. push本地代码到github出错

    $ git push -u origin masterTo git@github.com:******/Demo.git ! [rejected] master -> master (non-f ...