love fish大鹏一曰同风起,扶摇直上九万里

常用链接

统计

积分与排名

friends

link

最新评论

设计一个数据结构来存储这种超大型数字并且实现加减

package liaojiyong.net.blogjava; 

  

public class BigInt 

    
static int [] ArrOne = new int [1000]; 

  

    
static int [] ArrOne2 = new int [1000]; 

  

    
static int [] ArrOne3 = new int [1000]; 

  

    
static int [] ArrOne4 = new int [1000]; 

  

    
static StringBuffer intString ; 

  

    
static int token = 0

  

    
public static StringBuffer Arr( int [] ArrOne2) 

       intString 
= new StringBuffer(); 

       
int token1 = 0

       
for ( int i = ArrOne2. length - 1; i >= 0; i--

           
if (ArrOne2[i] != 0

              token1 
= 1

           }
 

           
if (token1 == 1

              
int ss = 9 - String.valueOf( ArrOne2 [i]).length(); 

              
if (ss > 0

                  
for ( int mm = 0; mm < ss; mm++

                     intString .append( 
"0" ); 

                  }
 

              }
 

              intString .append(ArrOne2[i] 
+ " " ); 

           }
 

       }
 

       
if ( intString .equals( "" ) || null == intString ) 

           intString .append( 
"0" ); 

       }
 

       
return intString ; 

    }
 

  

    
public static StringBuffer ArrAdd( int [] ArrOne3, int [] ArrOne4) 

       intString 
= new StringBuffer(); 

       
int [] arrAddResult = new int [1000]; 

       
for ( int i = 0; i < ArrOne3. length ; i++

           
if (ArrOne3[i] >= 1000000000 || ArrOne4[i] >= 1000000000

              System. out .println( 
"Data Out Out Of Range!" ); 

              
return null ; 

           }
 

           
if ((ArrOne3[i] > 0&& (ArrOne4[i] > 0

                  
&& (ArrOne3[i] + ArrOne4[i] + token >= 1000000000)) 

              arrAddResult[i] 
= ArrOne3[i] - 1000000000 + ArrOne4[i] + token ; 

              token 
= 1

           }
 else 

              arrAddResult[i] 
= ArrOne3[i] + ArrOne4[i] + token ; 

              token 
= 0

           }
 

       }
 

       
return Arr(arrAddResult); 

    }
 

  

    
public static void main(String[] args) 

       ArrOne3 [
0= 11

       ArrOne3 [
1= 11111111

       ArrOne3 [
2= 111111111

       ArrOne4 [
0= 1111

       ArrOne4 [
1= 11

       ArrOne4 [
2= 111111111

       System. out .println( 
"Arr = " + Arr( ArrOne3 ).toString()); 

       System. out .println( 
"ArrAdd(ArrOne3, ArrOne4) = " 

              
+ ArrAdd( ArrOne3 , ArrOne4 ).toString()); 

  

    }
 

  

}





减法和加法差不多,所以就不写了
Arr = 111111111 011111111 000000011
ArrAdd(ArrOne3, ArrOne4) = 222222222 011111122 000001122
 

posted on 2007-03-20 14:24 liaojiyong 阅读(2217) 评论(5)  编辑  收藏 所属分类: Java

评论

# re: 设计一个数据结构来存储这种超大型数字并且实现加减 2007-03-20 14:52 BeanSoft

java.math.BigInteger 和 java.math.BigDecimal 实现了任意精度的整数和浮点数的计算.... 哥们还是不错的, 有创意!

提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/math/package-summary.html  回复  更多评论   

# re: 设计一个数据结构来存储这种超大型数字并且实现加减 2007-03-20 15:33 lang

当年的面试题 ,不过自己没写出程序来,只是大致的描述了思路   回复  更多评论   

# re: 设计一个数据结构来存储这种超大型数字并且实现加减 2007-03-20 17:23 liaojiyong

package liaojiyong.net.blogjava;

import java.math.BigInteger;

public class BigIntegerTest {
public static void main(String[] args) {
BigInteger x = new BigInteger(
"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
BigInteger m = new BigInteger(
"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
BigInteger result = new BigInteger("0");
result = result.add(x).add(m);
System.out.println("result=" + result);
}
}


result=2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222


多谢 @BeanSoft
但要求设计一个数据结构,而不是现成的数据结构
  回复  更多评论   

# re: 设计一个数据结构来存储这种超大型数字并且实现加减 2007-03-20 17:57 BeanSoft

那就只能用当年学数据结构描述计算机加减法的原理来做了....  回复  更多评论   

# re: 设计一个数据结构来存储这种超大型数字并且实现加减 2007-03-20 18:01 dennis

存储成字符串,通过栈来实现加减,这是当年做过的一道数据结构题  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: