杭电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 ...
随机推荐
- CODEVS 2994 超级弹珠
题目描述 Description 奶牛们最近从著名的奶牛玩具制造商Tycow那里,买了一套仿真版彩蛋游戏设备.Bessie把她们玩游戏的草坪划成了N*N单位的矩阵,同时列出了她的K个对手在草地上的位置 ...
- office2016 部分截图
哈啊哈哈啊哈 看看吧~~~~~~~~~~~~~~~~~
- SQL Server 修改排序规则
Net stop mssqlserver Setup /QUIET /ACTION=REBUILDDATABASE /instancename=mssqlserver /SQLSYSADMINACCO ...
- Hadoop 2.4.0完全分布式平台搭建、配置、安装
一:系统安装与配置 Hadoop选择下载2.4.0 http://hadoop.apache.org / http://mirror.bit.edu.cn/apache/hadoop/common/h ...
- JavaScript函数调用
1. 调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数. 2. 除了声明时定义的形参,每个函数都有两个附加的参数:this和arguments. 1. this在面向对象编程中很重要,它的值 ...
- POJ2201+RMQ
/* RMQ */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algo ...
- linux如何关闭防火墙
1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service iptables sta ...
- 【HDOJ】1009 FatMouse' Trade
这道题目是一道非常简单的贪心,但是我却修改了1h+.原因就是qsort的comp有bug.其实还是题目中的数据可以为0.除数为0真的要慎重啊.后来改为结构体,加一层循环选取最大值,果然ac啊.wa了几 ...
- Android开发之异步消息处理机制AsyncTask
转自:Android AsyncTask完全解析,带你从源码的角度彻底理解 另外一篇比较详细的博文:http://blog.csdn.net/liuhe688/article/details/6532 ...
- 常见 jar包详解
常见 jar包详解 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期 ...