两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示。例如S1=”7832974972840919321747983209327”,S2=”1987432091904327543957”,设计算法计算出S1*S2的结果,结果用String输出,不准用BigInter。

思路:

根据手工计算两数相乘的过程,用代码实现这个过程。

代码:

import java.util.Scanner;
public class DaZhengShuChengJi {
public static void main(String[] args) {
System.out.println(multiply(num1, num2));
}
public static String multiply(String num1, String num2) {
int l = num1.length();
int r = num2.length();
//用来存储结果的数组,可以肯定的是两数相乘的结果的长度,肯定不会大于两个数各自长度的和。
int[] num = new int[l+r];
//第一个数按位循环
for(int i=0;i<l;i++) {
//得到最低位的数字
int n1=num1.charAt(l-1-i)-'0';
//保存进位
int tmp=0;
//第二个数按位循环
for(int j=0;j<r;j++) {
int n2=num2.charAt(r-1-j)-'0';
//拿出此时的结果数组里存的数+现在计算的结果数+上一个进位数
tmp=tmp+num[i+j]+n1*n2;
//得到此时结果位的值
num[i+j]=tmp%10;
//此时的进位
tmp/=10;
}
//第一轮结束后,如果有进位,将其放入到更高位
num[i+r]=tmp;
} int i=l+r-1;
//计算最终结果值到底是几位数,
while(i>0&&num[i]==0){
i--;
}
StringBuilder result="";
//将数组结果反过来放,符合正常读的顺序,
//数组保存的是:1 2 3 4 5
//但其表达的是54321,五万四千三百二十一。
while(i>=0) {
result += num[i--];
}
return result;
}
}

两个大数相乘-Java的更多相关文章

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

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

  2. 用字符串模拟两个大数相加——java实现

    问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...

  3. Multiply Strings 大数相乘 java

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

  4. 大数相乘 java

    <pre name="code" class="java">package bigMultiply; import java.math.BigInt ...

  5. 两个大数相乘 - 高精度FFT

    HDU 1402 A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  6. Go--实现两个大数相乘

    ----- import ( "bufio" "fmt" "os" "strings" ) func multi(str ...

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

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

  8. 1051:A × B problem 大数相乘

    给你两个整数,请你计算A × B. 输入 数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数.接着有T组数据,每组数据只有一行,包括两个非负整数A和B.但A和B非常大,Redraimen ...

  9. java版大数相乘

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

随机推荐

  1. [C++ Calculator 项目] 初试

    Calculator V1.0 注:这是一个C++计算器项目的初始部分. 大体功能简介: 能够输入一串数学表达式 逐字符扫描,提取数字和符号得到一组队列 逐行输出提取的符号与数字 实现代码如下: sc ...

  2. 用Node.JS+MongoDB搭建个人博客(成品展示)

    在博客里可以随意畅写和分享自己喜欢的技术,和网友分享知识也是一种提升.根据自己所发表的博客也能更加加深印象. 与此同时写博客也可以提高自己的写作能力(虽然不咋地),但我相信博客只会越写越有质量的. 博 ...

  3. Python进阶——笔记1

    1.*args 的用法 *args 和 **kwargs 主要用于函数定义. 你可以将不定数量的参数传递给一个函数. 这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场 ...

  4. (转)eclipse安装jetty

    背景:在项目开发的过程中,一个老的项目使用的是jetty启动,在用tomcat启动的过程中出现了启动不了的异常,浪费了好多时间.因为项目一直是用jetty启动的,为了不浪费时间,也只好改变思路选择je ...

  5. Ubuntu16.04配置Mac主题

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7072878.html 觉得有帮助?欢迎来打赏 Ubuntu配置Mac主题 下 ...

  6. ReentrantLock实现原理及源码分析

    ReentrantLock是Java并发包中提供的一个可重入的互斥锁.ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性.只不过相比原生的Sync ...

  7. 面向对象设计——抽象工厂(Abstract Factory)模式

    定义 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类.抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么.这样一来,客户就能从具体的产 ...

  8. 【整理】01. localhost_access_log 记录post请求参数

    环境:apache-tomcat-7.0.57 利用Filter过去request请求参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  9. 关于Django的理解

    Django的理解 Django的核心是中间件, 所有的请求和响应都会经过中间件 中间件是一个钩子框架, 它们可以介入请求的响应处理过程, 它用于在全局修改Django的输入和输出 Django有以下 ...

  10. POJ1975 Median Weight Bead floyd传递闭包

    Description There are N beads which of the same shape and size, but with different weights. N is an ...