处理两大数相乘,以下为Java代码:
- public class BigInt {
- /**
- * @param args
- */
- public static void main(String[] args) {
- String num1 = "1234" ;
- String num2 = "56789" ;
- mult(num1, num2) ;
- }
- /**
- * 直接输出任意两数相乘
- * @param n1
- * @param n2
- */
- public static void mult(String n1, String n2) {
- int[] result = new int[n1.length()+n2.length()] ; // 这里为存放两数相乘后的得数。这个可以动态规划
- // 字符串转数字数组处理,算法的效率就是在这些地方浪费的
- int[] num1 = new int[n1.length()] ;
- int[] num2 = new int[n2.length()] ;
- for(int i = 0; i < n1.length(); i++) {
- num1[i] = Character.getNumericValue(n1.charAt(i)) ;
- }
- for(int i = 0; i < n2.length(); i++) {
- num2[i] = Character.getNumericValue(n2.charAt(i)) ;
- }
- // 核心代码,其实简单来说就是我们笔算怎么算,代码就怎么算,这样无论多大的数,都是可以算的
- // 里面稍微做了些细致的处理,认真看很容易就能明白
- int tempNum ;
- int tt ;
- for(int i = num1.length-1; i >= 0; i--) {
- for(int j = num2.length-1; j >= 0; j--) {
- tempNum = num1[i] * num2[j] ;
- tt = result.length - (num1.length-i) - (num2.length-j) ;
- if(tempNum >= 10) {
- f(result, tt, tempNum % 10) ;
- f(result, tt-1, tempNum / 10) ;
- }else {
- f(result, tt, tempNum) ;
- }
- }
- }
- // 输出,这仅仅只是将数组前面的0去掉,去实际的答案
- boolean found = false ;
- for(int t : result) {
- if(t != 0 && found == false) {
- System.out.print(t) ;
- found = true ;
- }else if(found == true) {
- System.out.print(t) ;
- }
- }
- System.out.println() ;
- }
- /**
- * 相乘后相加处理,有关于两数相加后>=10的时候应该怎么进一位的处理,
- * 知道不在有进一位为止
- * @param result
- * @param tTe
- * @param tempNum1
- */
- public static void f(int[] result, int tTe, int tempNum1) {
- int t ;
- while(true) {
- if(result[tTe+1] + tempNum1 >= 10) {
- t = result[tTe+1] ;
- result[tTe+1] = (result[tTe+1] + tempNum1) % 10 ;
- tTe-- ;
- tempNum1 = (t + tempNum1) / 10 ;
- }else {
- result[tTe+1] += tempNum1 ;
- break ;
- }
- }
- }
- }
虽说类库里面有大数处理类,但为了提高算法水平,还是自己写了下,希望对大家学习有帮助。