計算機處理的各類數據類型都有個範圍,超出範圍的就處理不了。數組
若是作超大數運算加減乘除,普通方法確定是不行的,那麼咱們遇到大數的運算怎麼處理呢?今天介紹一種大數加減乘除運算的方法app
思路:spa
1. 將兩個特大的整數利用字符數組做爲存儲介質。code
2. 逐位計算 遍歷結果逢十進一。blog
3. 對存儲結果的數組進行翻轉處理。get
下面上代碼:string
1 public class LargeIntSub { 2 public static void main(String[] args) { 3 4 String a="6789"; 5 String b="123"; 6 int []pa=stringToInts(a); 7 int []pb=stringToInts(b); 8 String result_sub=sub(pa,pb); 9 System.out.println("sub result is:"+result_sub); 10 } 11 12 public static int[] stringToInts(String s){ 13 int[] n = new int[s.length()]; 14 for(int i = 0;i<s.length();i++){ 15 n[i] = Integer.parseInt(s.substring(i,i+1)); 16 } 17 return n; 18 } 19 20 public static String sub(int []a,int []b){ 21 StringBuffer sb=new StringBuffer(); 22 boolean flag=false; 23 if(a.length<b.length){ 24 int c[]=a; 25 a=b;b=c; 26 flag=true; 27 } 28 int a_len= a.length-1; 29 int b_len=b.length-1; 30 int degrade=0; 31 while(a_len>=0||b_len>=0){ 32 int temp=0; 33 if(a_len>=0&&b_len>=0){ 34 if((a[a_len]-degrade)<b[b_len]){ 35 temp=a[a_len]+10-b[b_len]-degrade; 36 degrade=1; 37 }else{ 38 temp=a[a_len]-b[b_len]-degrade; 39 } 40 }else if(a_len>=0){ 41 temp=a[a_len]-degrade; 42 degrade=0; 43 } 44 sb.append(temp+""); 45 46 a_len--;b_len--; 47 } 48 if(flag){ 49 return getNum(sb.append("-").reverse()); 50 } 51 return getNum(sb.reverse()); 52 } 53 public static String getNum(StringBuffer sb){ 54 while(sb.length() > 1 && sb.charAt(0) == '0') { 55 sb.deleteCharAt(0); 56 } 57 return sb.toString(); 58 } 59 60 }