<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的更多相关文章

  1. 华为上机测试题(大数相乘-java)

    PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...

  2. 两个大数相乘-Java

    两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示.例如S1="7832974972840919321747983209327",S2="19 ...

  3. Multiply Strings 大数相乘 java

    先贴上代码 public String multiply(String num1, String num2) { String str = ""; StringBuffer sb ...

  4. POJ 2389 Bull Math(水~Java -大数相乘)

    题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...

  5. java版大数相乘

    在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...

  6. Java 大数相乘、大数相加、大数相减

    思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...

  7. 大数相乘算法C++版

    #include <iostream> #include <cstring> using namespace std; #define null 0 #define MAXN ...

  8. Linux C/C++ 编程练手 --- 大数相加和大数相乘

    最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...

  9. Karatsuba乘法--实现大数相乘

    Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...

随机推荐

  1. web项目部署在centos 7验证码显示不出来解决方案

    今天把项目部署在centos7上,发现验证码显示不出来,看了一下tomcat日志 Exception in thread "http-nio-8080-exec-3" java.l ...

  2. Java学习笔记【十二、网络编程】

    原计划的学习结束时间是3月4日,目前看来已经延迟了,距离低标还差一些,多方面原因,也不找借口,利用周末赶赶进度,争取本周末把低标完成吧! 参考: http://www.runoob.com/java/ ...

  3. 【异常】lockfile.AlreadyLocked: ~/airflow/airflow-scheduler.pid is already locked

    1 完整异常信息 File "/usr/bin/airflow", line 32, in <module> args.func(args) File "/u ...

  4. python常用模块:项目目录规范、定制程序入口、自定义模块、引用变量、time和datetime模块

    今天讲课内容有两大部分: 一.文件目录规范二.定制程序入口三.使用标准目录后四.常规函数time.datetime 一.标准目录规范 之前用过的案例atm机+购物商城代码过长,在学习了模块和包以后,我 ...

  5. windows 快捷键收集

    1. 放大镜 windows徽标 + "+“ 2. 直接显示桌面 windows徽标 + D 3. 收起所有窗口 windows徽标 + M 4. 浏览器中恢复之前关闭的页面 Ctrl + ...

  6. js遍历数组随机返回指定的数组结果

    ////随机生成数组中自定义的个数返回一个字符串数组    function getArrayItems(arr, num) {        //新建一个数组,将传入的数组复制过来,用于运算,而不要 ...

  7. HNOI 世界树 虚树

    //virtual tree /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #defin ...

  8. loj2424 「NOIP2015」子串[字符串DP]

    给定字符串 A,B,要求从 A 中取出互不重叠的 k 个非空子串,按照出现顺序拼起来后等于 B.求方案数.n ≤ 1000,m ≤ 200. 主要是状态的转移.先设计出$f_{i,j,k}$表长度$B ...

  9. img标签的before,after伪类

    在CSS中总有一些你不用不知道,用到才知道的“坑”.比如今天要谈的,把 before, after 伪类用在 <img> 标签上.嗯,实际上你用你会发现,在大多数浏览器这是无效的,dom中 ...

  10. 【原】涉及数据库的单元测试-JTeser

    JTeser方法之一:@DbFit 一.maven 依赖项 <dependency> <groupId>org.testng</groupId> <artif ...