大数相乘 java
2016-03-26 13:56
369 查看
<pre name="code" class="java">package bigMultiply; import java.math.BigInteger; /** * 大數相乘 * @author root * */ public class MyMultiply1 { /** * @param args */ public static void main(String[] args) { String str1 = "23456789009877666555544444"; String str2 = "346587436598437594375943875943875"; String result = multiply(str1, str2); String result1 = multiply1(str1, str2); System.out.println("乘数:"+str1); System.out.println("乘数:"+str2); System.out.println("结果:"+result); System.out.println("结果:"+result1); } private static String multiply1(String str1, String str2){ BigInteger bigInteger1=new BigInteger(str1); BigInteger bigInteger2=new BigInteger(str2); //multiplay bigInteger1=bigInteger1.multiply(bigInteger2); return bigInteger1.toString(); } public static String multiply(String str1, String str2) { //判断符号 char flag1; char flag2; char flag; if(str1.charAt(0)=='-'){ flag1 = '-'; str1 = str1.substring(1); }else if(str1.charAt(0)=='+'){ flag1 = '+'; str1 = str1.substring(1); }else{ flag1 = '+'; } if(str2.charAt(0)=='-'){ flag2 = '-'; str2 = str2.substring(1); }else if(str2.charAt(0)=='+'){ flag2 = '+'; str2 = str2.substring(1); }else{ flag2 = '+'; } if(flag1==flag2){ flag = '+'; }else{ flag = '-'; } // 两数乘积位数不会超过乘数位数和+ 3位 char [] s1 = new StringBuffer(str1).reverse().toString().toCharArray(); char [] s2 = new StringBuffer(str2).reverse().toString().toCharArray(); int [] result = new int[str1.length()+str2.length()+3]; //逐位相乘 for(int i=0; i<s1.length; i++){ for(int j=0; j<s2.length; j++){ result[i+j]+= (s1[i]-'0')*(s2[j]-'0'); } } //进位 for(int i=0; i<result.length-1; i++){ result[i+1]+=result[i]/10; result[i] = result[i]%10; } //输出 boolean start = false; StringBuilder sb = new StringBuilder(); sb.append(flag); for(int i=result.length-1; i>=0; i--){ if(result[i]!=0){ start=true; } if(start){ sb.append(result[i]); } } return sb.toString(); } }
相关文章推荐
- 使用Java开发OpenCV程序-1.开发环境安装与配置
- 做一个合格的程序猿之浅析Spring AOP源码(十八) Spring AOP开发大作战源码解析
- 初级排序算法之冒泡、选择、插入、希尔排序(附Java实现和分析)
- 简单的Java继承示例!
- day09 用Myeclipse开发servlet,servlet的生命周期(面试题),ServletContext
- java代理、cglib、java proxy
- Java设计模式之“抽象工厂模式“
- Java包名命名规则(转载)
- Android 增强版百分比布局库 Eclipse Demo
- Java配置jdk图文教程
- java日期时间Date类
- Spring 接口代理 类代理
- Java中的static关键字解析
- java序列化简单使用
- JAVA 注解入门
- JAVA 内存管理
- java文件重命名
- Java异常:Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion;
- JSp+javaBean开发模式---求和运算
- Java 递归实现格雷码(Gray Code)