1. <pre name="code" class="java">package bigMultiply;
  2.  
  3. import java.math.BigInteger;
  4. /**
  5. * 大數相乘
  6. * @author root
  7. *
  8. */
  9. public class MyMultiply1 {
  10.  
  11. /**
  12. * @param args
  13. */
  14. public static void main(String[] args) {
  15. String str1 = "23456789009877666555544444";
  16. String str2 = "346587436598437594375943875943875";
  17.  
  18. String result = multiply(str1, str2);
  19. String result1 = multiply1(str1, str2);
  20.  
  21. System.out.println("乘数:"+str1);
  22. System.out.println("乘数:"+str2);
  23. System.out.println("结果:"+result);
  24. System.out.println("结果:"+result1);
  25. }
  26.  
  27. private static String multiply1(String str1, String str2){
  28. BigInteger bigInteger1=new BigInteger(str1);
  29. BigInteger bigInteger2=new BigInteger(str2);
  30. //multiplay
  31. bigInteger1=bigInteger1.multiply(bigInteger2);
  32. return bigInteger1.toString();
  33. }
  34.  
  35. public static String multiply(String str1, String str2) {
  36. //判断符号
  37. char flag1;
  38. char flag2;
  39. char flag;
  40. if(str1.charAt(0)=='-'){
  41. flag1 = '-';
  42. str1 = str1.substring(1);
  43. }else if(str1.charAt(0)=='+'){
  44. flag1 = '+';
  45. str1 = str1.substring(1);
  46. }else{
  47. flag1 = '+';
  48. }
  49. if(str2.charAt(0)=='-'){
  50. flag2 = '-';
  51. str2 = str2.substring(1);
  52. }else if(str2.charAt(0)=='+'){
  53. flag2 = '+';
  54. str2 = str2.substring(1);
  55. }else{
  56. flag2 = '+';
  57. }
  58. if(flag1==flag2){
  59. flag = '+';
  60. }else{
  61. flag = '-';
  62. }
  63. // 两数乘积位数不会超过乘数位数和+ 3位
  64. char [] s1 = new StringBuffer(str1).reverse().toString().toCharArray();
  65. char [] s2 = new StringBuffer(str2).reverse().toString().toCharArray();
  66.  
  67. int [] result = new int[str1.length()+str2.length()+3];
  68. //逐位相乘
  69. for(int i=0; i<s1.length; i++){
  70. for(int j=0; j<s2.length; j++){
  71. result[i+j]+= (s1[i]-'0')*(s2[j]-'0');
  72. }
  73. }
  74. //进位
  75. for(int i=0; i<result.length-1; i++){
  76. result[i+1]+=result[i]/10;
  77. result[i] = result[i]%10;
  78. }
  79. //输出
  80. boolean start = false;
  81. StringBuilder sb = new StringBuilder();
  82. sb.append(flag);
  83. for(int i=result.length-1; i>=0; i--){
  84. if(result[i]!=0){
  85. start=true;
  86. }
  87. if(start){
  88. sb.append(result[i]);
  89. }
  90. }
  91. return sb.toString();
  92. }
  93. }
  1.  

大数相乘 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. JavaWeb【一、简介】

    原计划上周完成的内容,硬是过了一个清明拖到了这周,工作上还有很多东西没做...明天抓紧看把,争取这周末搞定 内容简介:(学习完后会重新梳理调整) 1.JavaWeb[一.简介] 2.JavaWeb[二 ...

  2. 5、vim编辑器

    1.什么是VIM? 理解为windows下面的文本编辑器,比如记事本,比如word文档 2.为什么要学? 因为在后面我们配置的服务,都需要人为修改配置,以便让程序按照我们修改后的指示运行. 1.修改配 ...

  3. PHP-MYSQL中文乱码问题.

    从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行. 解决这个问题其实很简单. 1.在建表的时候设置编码类型为gb2312_chinese_ci. 2.在 ...

  4. qt libusb

    https://github.com/Kakadu/Qt_libusb https://github.com/mcvsama/libusbcc/tree/master/src/libusbcc htt ...

  5. unbutu apt-get update失败及解决办法

    今天在用apt-get update更新时一直失败,报的错误为”Failed to fetch 404 Not Found”,因为我的镜像改为了mirrors.aliyun.com 我试着ping了一 ...

  6. springboot-rabbitmq的使用

    一.RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  7. UVa540 Team Queue(队列queue)

    队列 STL队列定义在头文件<queue>中, 用“ queue<int>s ” 方式定义, 用push()和pop()进行元素的入队和出队操作, front()取队首元素(但 ...

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

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

  9. vue项目中,点击按钮复制其内容

    <el-table-column label="推广链接" align="center"> <template slot-scope=&quo ...

  10. Navicat导出表结构

    SQL Server导出表结构 Oracle导出表结构