计算机处理的各种数据类型都有个范围,超出范围的就处理不了。
如果做超大数运算加减乘除,普通方法肯定是不行的,那么我们遇到大数的运算怎么处理呢?今天介绍一种大数加减乘除运算的方法
思路:
1. 将两个特大的整数利用字符数组作为存储介质。
2. 逐位计算 遍历结果逢十进一。
3. 对存储结果的数组进行翻转处理。
下面上代码:
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 }