请教长整数 x 长整数 Code
时间:2014-04-11
来源:互联网
请输入第一数 : 1230981204973453434534510732
请输入第二数 : 64569845695683295334534534534586
关於 1230981204973453434534510732 x 64569845695683295334534534534586
= 79484266459422178553419202408729802785262572401684842176952
最好 Java Code, 甚他 code 都 okay la.
Thank you!
作者: me888 发布时间: 2014-04-11
作者: Susan﹏汪汪 发布时间: 2014-04-11

作者: me888 发布时间: 2014-04-11
哈哈!你嘅C++ 太强啦, 好难明

http://www.discuss.com.hk/viewthread.php?tid=23105431
作者: Susan﹏汪汪 发布时间: 2014-04-11
哈哈!你嘅C++ 太强啦, 好难明

作者: Susan﹏汪汪 发布时间: 2014-04-11

[ 本帖最后由 me888 於 2014-4-1 12:48 PM 使用 编辑 ]
作者: me888 发布时间: 2014-04-11
哈哈!我啲旧人脱晒节啦,未学过OO. 要睇多些Tutorial恶补一下,我谂紧将现成旧code转成新Java code. string input 再转数字,开 array 来计,嘻嘻,只作练习一下Java .BTW, 你嘅 JavaScript 都好强。读 ...
作者: Susan﹏汪汪 发布时间: 2014-04-11

作者: me888 发布时间: 2014-04-11
例如有个function
可以把a和b变成
a1*base + a2
b1*base + b2
咁a * b = a1*b1*base^2 + (a1*b2 + b1*a2)*base + a2*b2
所以例如整数乘法
123456*789012
可以分拆成Array[123, 456]和Array[789, 12]
咁最终得出Array[123*789, 123*12 + 789*456, 456*12]
处理埋进位就完成
当然个base不一定系10^3
可以系任何数、例如电脑用二进制比较方便
如果太长的数字、就可以用recursion
以上算法理论上都系convolution的精简版
作者: Susan﹏汪汪 发布时间: 2014-04-11
= 393706401010586690115662934726040569292560532967393351007671615018540042650653437089304125648277060451851808
汪汪的算法计出来
作者: Susan﹏汪汪 发布时间: 2014-04-11

作者: me888 发布时间: 2014-04-11
请教如何精确地计算出一个稍长的整数 乘於 另一整数, 并精算地计出答案
请输入第一数 : 1230981204973453434534510732
请输入第二数 : 64569845695683295334534534534586
关於 123098120497345343453451073 ...
不过唔知点解用 http://repl.it/languages/Ruby 及 http://repl.it/languages/Python
分别计得
79484266459422178556481743541786893846643118876806624731136 及 79484266459422178553419202408729802785262572401684842176952 。
应该是前者错了。
作者: xianrenb 发布时间: 2014-04-11
import java.util.Scanner;
public class Multiply
{
public String mul(String str1,String str2)
{
StringBuffer bstr=new StringBuffer();
int i=0,j=0;
for(i=0;i<str1.length()+str2.length();i++)
{
bstr.append('0');
}
int k=bstr.length()-1,add=0,temp=0;
for(j=str2.length()-1;j>=0;j--)
{
if(str2.charAt(j)!='0')
{
for(i=str1.length()-1;i>=0;i--)
{
k=i+j+1;
temp=(str2.charAt(j)-'0')*(str1.charAt(i)-'0')+(bstr.charAt(k)-'0');
bstr.setCharAt(k--, (char)('0'+temp%10));
add=temp/10;
while(add!=0)
{
temp=add+bstr.charAt(k)-'0';
bstr.setCharAt(k--, (char)('0'+temp%10));
add=temp/10;
}
}
}
}
return bstr.substring(firstNotZeroIndex(bstr));
}
private int firstNotZeroIndex(StringBuffer str)
{
for(int i=0;i<str.length();i++)
if(str.charAt(i)!='0')
return i;
return str.length()-1;
}
public static void main(String[] args)
{
Multiply mul=new Multiply();
Scanner cin=new Scanner(System.in);
System.out.print("请输入第一个整数:");
String str1=cin.next();
System.out.print("请输入第二个整数:");
String str2=cin.next();
System.out.print("结果是:");
System.out.println(mul.mul(str1, str2));
}
}
作者: me888 发布时间: 2014-04-11


[ 本帖最后由 me888 於 2014-4-2 11:36 AM 编辑 ]
作者: me888 发布时间: 2014-04-11
<head>
<script>
function cal(n1,n2){
var len1=n1.length,
len2=n2.length;
var result=new Array(len1+len2);
for (var i=0;i<result.length;i++) {
result[i]=0;
}
for (var i=0;i<len1;i++){
for (var j=0;j<len2;j++){
result[j+i+1]+=n1[i]*n2[j];
}
}
i=result.length;
while (--i) {
if (result[i]>10){
result[i-1]+=Math.floor(result[i]/10);
result[i]=result[i]%10;
}
}
if (result[0]==0) result.shift();
return result.join("");
}
var N1,N2,result;
window.onload=function(){
N1=document.getElementById("N1");
N2=document.getElementById("N2");
result=document.getElementById("result");
}
</script>
</head>
<body>
<input id="N1" style="width:50ex"/><br/>
<input id="N2" style="width:50ex"/>
<button onclick="result.value=cal(N1.value,N2.value)">cal</button><br/>
<input id="result" style="width:100ex"/>
</body>
</html>
[ 本帖最后由 slight 於 2014-4-2 04:38 PM 编辑 ]
作者: slight 发布时间: 2014-04-11
作者: 天会穴 发布时间: 2014-04-11
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28