這個只能夠用字符串的形式來處理了,因為計算機能夠處理的最大是long型,本文以字符串的形式來進行超大數據的相加,理論上只要你的內存允許,相加多大的數都可以。
/**
* 超大整數相加:
* 題目要求:如果系統要使用超大整數(超過long的范圍),請你設計一個數據結構來存儲這種
* 超大型數字以及設計一種算法來實現超大整數的加法運算
* @author Administrator
*
*/
public class VeryBigNumAdd {
* @param args
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
String a="1223232";
for(int i=a.length()-1;i>=0;i--)
{
System.out.print(a.charAt(i));
}
VeryBigNumAdd vbn=new VeryBigNumAdd();
String a="123453243455535634535252345234677576252241234123523453664563634";
String b="123453243455535634535252345234677576252241234123523453664563634";
String result=vbn.doAdd(a,b);
System.out.println("result:"+result);
* @param a 加數字符串1
* @param b 加數字符串2
* @return 結果字符串
* 分析:
* 1、取得兩個字符串的長度
* 2、把兩個的長度做比較,并得出較長的長度,及較短的長度
* 3、把長度較短的加數字符串,在左面補0,使之與較長的字符串一樣長
* 4、從最高位,一個個數的取出來相加,當然首先得轉換為整型
* 5、設置進位,如果兩個數相加及加上進位大于等于10,并且這不是最左邊一個字符相加,相加結果等于
* (取出1+取出2+進位)-10,并把進位設為1;如果沒有大于10,就把進位設為0,如些循環,把
* 相加的結果以字符串的形式結合起來,就得到最后的結果
String doAdd(String a,String b)
String str="";
int lenA=a.length();
int lenB=b.length();
int maxLen=(lenA>lenB) ? lenA : lenB;
int minLen=(lenA<lenB) ? lenA : lenB;
String strTmp="";
for(int i=maxLen-minLen;i>0;i--)
strTmp+="0";
//把長度調整到相同
if(maxLen==lenA)
b=strTmp+b;
}else
a=strTmp+a;
int JW=0;//進位
for(int i=maxLen-1;i>=0;i--)
int tempA=Integer.parseInt(String.valueOf(a.charAt(i)));
int tempB=Integer.parseInt(String.valueOf(b.charAt(i)));
int temp;
if(tempA+tempB+JW>=10 && i!=0)
temp=tempA+tempB+JW-10;
JW=1;
else
temp=tempA+tempB+JW;
JW=0;
str=String.valueOf(temp)+str;
return str;
原帖地址: http://blog.csdn.net/fenglibing/archive/2007/08/23/1756773.aspx 其實java 本身也提供了api ,java.math.BigInteger;import java.math.BigDecimal; 也可以實現。
package com.kangdy.test;
import java.math.BigInteger; import java.math.BigDecimal;
public class NumberTest { public static void main(String args[]){ BigInteger b1= new BigInteger("2222222222222222222222222"); BigInteger b2= new BigInteger("8888888888888888888888888"); BigDecimal b3 = new BigDecimal("66666666666666666666666666"); BigDecimal b4 = new BigDecimal("9999999999999999999999999999"); System.out.println(b1.add(b2).toString()); System.out.println(b3.add(b4).toString()); } }
這里只是給出簡單的例子。
posted on 2010-12-10 14:06 AK47 閱讀(927) 評論(0) 編輯 收藏 所屬分類: java相關
Powered by: BlogJava Copyright © AK47