package chow.test;
/**
* @author Chow
* @date Jun 7, 2010
* @Description 大整数的加法,减法,乘法,除法
*/
public class BigNumOperation {
private static String result;
//加法,从低位加起,逢十进一
public static String add(String firstNum, String secondNum){
result = "";
int maxLength = firstNum.length() >= secondNum.length() ? firstNum.length() : secondNum.length();
int index = maxLength - 1;
int carry = 0;
while(firstNum.length() < maxLength){
firstNum = "0" + firstNum;
}
while(secondNum.length() < maxLength){
secondNum = "0" + secondNum;
}
while(index >= 0){
int firstInt = Integer.valueOf(firstNum.substring(index, index + 1));
int secondInt = Integer.valueOf(secondNum.substring(index, index + 1));
result += (firstInt + secondInt + carry) % 10;
carry = (firstInt + secondInt + carry) / 10;
index--;
}
if(carry != 0){
result += carry;
}
return revert(result);
}
//减法,分三种情况:1.两者相等,返回0,2:大数减小数,小数补0,逐位减,借位;3:小数减大数,转化为2,加-号
public static String minus(String firstNum, String secondNum){
result = "";
String sign = "";
if(firstNum.equals(secondNum)){
return "0";
}
//小数-大数,交换firstNum与secondNum,并符号置为-
if(firstNum.length() < secondNum.length()
|| (firstNum.length() == secondNum.length() && firstNum.compareTo(secondNum) < 0)){
sign = "-";
String tmp = firstNum;
firstNum = secondNum;
secondNum = tmp;
}
//若小数(secondNum)不足位,高位补0
while(secondNum.length() < firstNum.length()){
secondNum = "0" + secondNum;
}
//大数从低位开始,逐位减小数
int index = firstNum.length() - 1;
int borrow = 0; //记录借位
while(index >= 0){
int left = firstNum.charAt(index) - secondNum.charAt(index) + borrow;
if(left < 0){
borrow = -1;
left += 10;
}
result = left + result;
index--;
}
//去除多余的前导0
while(result.indexOf("0") == 0){
result = result.substring(1);
}
return sign + result;
}
//反转字符串
public static String revert(String string){
char[] charArray = new char[string.length()];
for(int i = 0; i < string.length(); i++){
charArray[i] = string.charAt(string.length() - 1 - i);
}
return new String(charArray);
}
public static void main(String[] args){
System.out.println(BigNumOperation.add("4561427489456123", "798754564567343"));
System.out.println(BigNumOperation.minus("5345435435", "543543543543"));
}
}
分享到:
相关推荐
此外,对于除法,如果被除数为0,该类可以报错。对于加、减、乘、除之外的运算符,该类应该告知无法处理。 (2)编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入...
当创建一个计算器应用程序时,我们需要考虑如何实现基本的数学运算功能,包括加法、减法、乘法和除法。在这篇Java实战博客中,我将向您展示如何使用Java编程语言创建一个简单的计算器应用程序。我们将从创建用户界面...
一个java类,该类可以进行加、减、乘、除四则运算,并且可以输出运算结果。此外,对于除法,如果被除数为0,该类可以报错。对于加、减、乘、除之外的运算符,该类应该告知无法处理。 编写一个包含主方法main的公共类...
3、完成简单的整数加、减、乘、除运算。 四、实验报告内容要求: 1、简要分析Java Application方式建立的应用程序框架的 执行过程; 2、简要分析Windows计算器的布局拆分思路; 3、完整介绍整数加、减、乘、除运算的...
中级功能:在完成基本功能基础上,添加50以内的乘法、除法题(整数除法)出题、答题功能。 高级功能:在完成中级功能的基础上,新增记录做题过程、统计正确率及耗时功能,并在中止训练时显示。 (三)设计要求 1、该...
所有的中间结果必须是整数,所以一些除法运算是不允许的(例如,(2*2)/4是 合法的,2*(2/4)是不合法的) 下面我们给出一个游戏的具体例子: 若给出的6个操作数是:1,2,3,4,7和25,理想目标数是573; 则...
用Java实现求两整数的加、减、乘、除运算结果,要求两整数的范围都是 [0,100]o从键盘输入数m,数n,判断他们的范围,若不在[0,100]范围内,则 输出提示语,要求重新输入,并且在做除法运算时,当除数为0时,输出提示 ...
implements (关键字) 实现 ['implimәnt] import (关键字) 引入(进口,输入) Info n.信息 (information [,infә'meiʃәn] ) Inheritance [java] 继承 [in'heritәns] (遗传,遗产) initialize 预置 初始化 [i'ni...
java 编写计算器的简单程序//一个较为简洁的巧妙的计算器程序, import java.io.*; import java.awt.event.*; import java.awt.*; //需要解决的问题,数学的运算都有正负号的出现,在点击等号的时候就会有冲突,...
用户可以单独或一起使用关键字加,减,乘,除和幂来获得运算结果。 这些句子可能是诸如add(1,2),subtract(4.4,2)或add(multiply(3,1.2),4.7)之类,甚至更复杂。 对于“加”语法,括号中的两个数字均为加...
此Java算术运算仿真显示了如何通过硬件接线实现加,减,乘和除运算。 它还显示了不同操作的速度 本质上,整数加法器由单位加法器序列组成。 减法电路是由翻转电路和加法器制成的。 乘法电路是一系列复制,移位电路和...