大数相加
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文介绍一种借助字符串数组实现大数相加的运算。 思想很简单,就是对输入的大数当作字符串来处理,这样就不受数值位数的限制了。其 中要处理的最主要的一个问题相加进位处理。 附件中有包含测试程序的所有源代码。
package com.nileader.big.entity; public class BigInt { private String data_str; //原始数据 private int digit; //数据位数 private int[] data; //大数 private boolean carry = false; //进位标识符 /** * setter and getter */ public boolean isCarry() { return carry; } public void setCarry(boolean carry) { this.carry = carry; } public String getData_str() { return data_str; } public void setData_str(String data_str) { this.data_str = data_str; } public int[] getData() { return data; } public void setData(int[] data) { this.data = data; } public int getDigit() { return digit; } public void setDigit(int digit) { this.digit = digit; } //构造方法
public BigInt(){}; public BigInt(String str_data) { this.setData_str(str_data); } //基本操作 /** * 形成大数 初始化 */ public void initBInt() { this.setDigit( this.getData_str().length() ); this.data = new int[this.getDigit()]; //将字符组成的大数逆序放入 int[] data 中 for(int i = 0, j=this.getDigit() ; i { // 1104 --> data[0] = '4',data[1] = '0',data[2]=1, data[3]= '1' this.data[i] = Integer.parseInt( this.getData_str().substring(j-1,j) ); } } /** * 进行大数相加操作 */ public void add( BigInt bint) { //this 的位数大于 bint 的位数 if( this.getDigit() < bint.getDigit() ) { int[] datatemp = this.getData(); this.setData( bint.getData()); bint.setData( datatemp); this.setDigit(this.getData().length); bint.setDigit(bint.getData().length); } //将短的那个先加完 int i =0; for(; i { int tdata = 0; //上次运算有进位 if( this.isCarry()) { tdata = this.getData()[i] + bint.getData()[i] +1;
//取消进位标识 this.setCarry(false); } else tdata = this.getData()[i] + bint.getData()[i] ; //本次结果无进位 if(tdata <10) this.data[i] = tdata; //本次结果有进位 else if(tdata >=10) { this.data[i] = tdata -10; this.setCarry(true); } } //短的那个加完了 //剩余数的处理 for(;i { //有个进位的 if(this.isCarry()) { int tdata = this.data[i]+1; if(tdata >=10) this.data[i] = tdata -10; else { this.data[i] = tdata; this.setCarry(false); } } } //对最高位益处检测 if(this.data[this.getDigit()-1] == 0) { int[] tdata = new int[this.getDigit()+1]; System.arraycopy(this.getData(), 0, tdata, 0, this.getDigit()); tdata[this.getDigit()] = 1; this.setData(tdata); } } }
其中代码段
//对最高位益处检测
if(this.data[this.getDigit()-1] == 0) { int[] tdata = new int[this.getDigit()+1]; System.arraycopy(this.getData(), 0, tdata, 0, this.getDigit()); tdata[this.getDigit()] = 1; this.setData(tdata); }
StringBuffer