Multiply Strings 大数相乘 java
先贴上代码
public String multiply(String num1, String num2) {
String str = "";
StringBuffer sb = new StringBuffer(num1);
num1 = sb.reverse().toString();
sb = new StringBuffer(num2);
num2 = sb.reverse().toString();
int[] res = new int[num1.length() + num2.length()];
for (int i = 0; i < num1.length(); i++) {
for (int j = 0; j < num2.length(); j++) {
res[i + j] += (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
}
}
int k = 0, contribute = 0;
while (k < res.length || contribute > 0) {
int tmp = k<res.length?res[k]:0;
tmp = contribute+tmp;
contribute = tmp/10;
str += tmp%10;
k++;
}
sb = new StringBuffer(str);
str = sb.reverse().toString();
int i = 0;
while(i<str.length()&&str.charAt(i)=='0')
i++;
if(i<str.length()){
str = str.substring(i);
}else{
str = "0";
}
return str;
}
思路如下:
模拟竖式相乘
1、转换并反转,字序反转;
2、逐位相乘,结果存放在res[i+j]中;
3、处理进位;
4、转换并反转,将计算结果转换为字符串并反转。
5、消除多余的0;
两数相乘,结果的长度一定不大于乘数和被乘数的长度之和。

上述也可以用直接用java的BigInteger类实现
public static void main(String[] args) {
String a = "98989898989898956898", b = "989892551548781251323265615150";
BigInteger aa = new BigInteger(a);
BigInteger bb = new BigInteger(b);
System.out.println(aa.multiply(bb));
}
Multiply Strings 大数相乘 java的更多相关文章
- leetcode 43 Multiply Strings 大数相乘
感觉是大数相乘算法里面最能够描述.模拟演算过程的思路 class Solution { public String multiply(String num1, String num2) { if(nu ...
- [LeetCode] 43. Multiply Strings ☆☆☆(字符串相乘)
转载:43. Multiply Strings 题目描述 就是两个数相乘,输出结果,只不过数字很大很大,都是用 String 存储的.也就是传说中的大数相乘. 解法一 我们就模仿我们在纸上做乘法的过程 ...
- Multiply Strings 字符串相乘
http://www.cnblogs.com/TenosDoIt/p/3735309.html https://blog.csdn.net/fly_yr/article/details/4805561 ...
- 华为上机测试题(大数相乘-java)
PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...
- Leetcode43. Multiply Strings字符串相乘(大数相乘)
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", num ...
- 两个大数相乘-Java
两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示.例如S1="7832974972840919321747983209327",S2="19 ...
- [LeetCode] Multiply Strings 字符串相乘
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- 43. Multiply Strings 字符串相乘
1. 原始题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2&qu ...
- [LeetCode] 43. Multiply Strings 字符串相乘
Given two non-negative integers num1 and num2represented as strings, return the product of num1 and ...
随机推荐
- MotionEvent的getX(),getY()与getRawX(),getRawY()区别
getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏 ...
- Luci流程分析(openwrt下)
1. 页面请求: 1.1. 代码结构 在openwrt文件系统中,lua语言的代码不要编译,类似一种脚本语言被执行,还有一些uhttpd服务器的主目录,它们是: /www/index.html cgi ...
- Randomized QuickSelect
In this blog, we give a solution for Quick Select. Here, we have an improvement. The idea is to rand ...
- RIAidea – Focus on Flash/Flex/AIR » About Me
RIAidea – Focus on Flash/Flex/AIR » About Me Browse > Home > About Me Tuesday, May 20, 2014 | ...
- SVN强制填写日志
在F:\Repositories\版本库名\hooks下新建pre-commit.bat 内容如下: @echo off setlocal set SVN_BINDIR="C:\Progra ...
- android ANR 案例分析
案例1:关键词:ContentResolver in AsyncTask onPostExecute, high iowait Process:com.android.email Activity:c ...
- c语言的lua库编写
gcc编译 gcc -I/usr/local/include/ -L/usr/local/lib/ -lm -o engine_mlisten_lua ./src/engine_mlisten_lua ...
- Winform单例模式与传值
单例模式(singleton)的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 在多窗体界面中,如果要加入一个“关于”的窗体,用于显 ...
- 003 assert简述
- HDU 1046 - Gridland
果然是数学题 #include <iostream> #include <cstdio> #include <cmath> using namespace std; ...