两个大数相乘JAVA版
2016-03-26 19:42
696 查看
import java.util.Scanner; public class BigNumMul { public static void main(String[] args) { Scanner canner = new Scanner(System.in); String str1 = canner.nextLine(); String str2 = canner.nextLine(); canner.close(); System.out.println(BigNumMul.mult(str1, str2)); } /* * str1 因子 str2 因子 * * @result 乘积 */ public static String mult(String str1, String str2) { String result = ""; int[] rs = BigNumMul.mul(BigNumMul.strToNum(str1), BigNumMul.strToNum(str2)); if (rs == null) { System.out.println("输入错误"); } else { result = BigNumMul.changeToString(rs); } return result; } /* * num1 因子 num1[i] 对应数字num1.length-i+1位 str2 因子 * * @result 乘积 */ public static int[] mul(int[] num1, int[] num2) { if (num1 == null || num1.length == 0 || num2 == null || num2.length == 0) return null; // 两数乘积位数不会超过乘数位数和+ 3位 int[] rs = new int[num1.length + num2.length + 3]; for (int i = 0; i < rs.length; i++) { rs[i] = 0; } // 对齐逐位相乘 for (int i = 0; i < num2.length; i++) { if (num2[i] == 0) { continue; } for (int j = 0; j < num1.length; j++) { if (num1[j] == 0) { continue; } rs[j + i] += (num1[j] * num2[i]); } } // 进位处理 for (int m = 0; m < rs.length; m++) { int carry = rs[m] / 10; rs[m] = rs[m] % 10; if (carry > 0) rs[m + 1] += carry; } return rs; } /* * 将字符串转换成对应int数组 */ public static int[] strToNum(String str) { if (str == null || "".equals(str)) { return null; } char[] c = str.toCharArray(); int[] num = new int[c.length]; // 高低位对调 for (int i = 0; i < c.length; i++) { int m = c.length - i - 1; if ('0' <= c[m] && c[m] <= '9') { num[i] = Integer.parseInt(String.valueOf(c[m])); System.out.println(num[i]); } else { return null; } } System.out.println(BigNumMul.changeToString(num)); return num; } /* * 将int数组转换成对应字符串 */ public static String changeToString(int[] num) { String rs = ""; int i = 0; // 找到最高位 for (i = num.length - 1; i >= 0; i--) { if (num[i] != 0) break; } for (; i >= 0; i--) { rs += num[i]; } return rs; } }
相关文章推荐
- Java中关于继承与多态的一道选择题
- 20145236 《Java程序设计》第4周学习总结
- java事务学习笔记(三)--丑陋的案例
- Java小的细节方面的整理与归纳
- 20145227 《Java程序设计》第4周学习总结
- 使用Java面向对象程序操作Oralce数据库实现界面增,删,改,查
- Eclipse修改默认编码格式:工作空间,工程,文件,某类文件(如jar)
- 在java中使用和创建自定义的native方法
- java集合框架
- java集合框架
- Java中的枚举类
- Java对象初始化
- 深入理解Java之反射
- 深入理解Java之集合框架
- java容器简单总结
- eclipse 配置ssh
- Java集合类常见问题(下)
- 深入理解Java之数据类型
- java开发 目录配置
- JAVA基础1 数组与方法