昨天网上看到一面试题,求大数相乘,一时手痒就敲了下,实现语言是java,虽然java.math.BigDecimal可以实现,但我还是喜欢自己敲:)
代码如下:
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));
}
}
分享到:
相关推荐
本程序可以求出:任意位的两个大数相乘的结果。 已经实验过>2000位的两数相乘,有兴趣的话,你也试一试吧。 support me!thanks!
java实现大数相乘,在不使用BigInteger工具方法的前提下进行大数相乘运算。
NULL 博文链接:https://aa00aa00.iteye.com/blog/2303318
大数相乘算法,java代码,包含独立大数相加算法 其中bigNumberPlus(String s1,String s2)为大数相加方法 bigNumberMultiply(String s1,String s2)为大数相乘方法
JAVA实现的两个特大整数相乘的算法,可以达到1000位数相乘。
两个大数相乘:利用数组实现,数组a存放大数1的每一位,数组b依次存放大数2的每一位。如:一大数1为3463546,则数组 a[]={3,4,6,3,5,4,6},大数2为:89019 则数组b[]={8,9,0,1,9},现在要大数1和大数2相乘,并按数位...
在计算机语言中,整数最大可以设置为unsigned long类型的,但是表示有限,当涉及到两个大整数相乘的时候,会出现不能表示的情况,鉴于此编制此算法予以解决大整数相乘。本程序使用分治法实现,将n位二进制整数X和Y都...
包含模拟手工算大数相加、大数相乘(大数=越位的数)
大数乘法可以进行任意大小和精度的整数和浮点数的乘法运算, 精确度很高, 可以用作经融等领域的计算,这个是我看了一些资料, 然后自己整理实现的,简单测试了一下
通过使用分治的思想解决大数相乘的问题,资源中仅为一个java类
大整数分解问题:给定两个n位长二进制数x和y,求这两个数的乘积。时间复杂性控制在Θ(n1.6)
华中科技大学算法实验,包含大数相乘,二分查找树,最近点对和floyd算法
算法中将被乘数与乘数按照相同位数进行分组,通过对每组较小数值整数进行乘法和加法运算而得到大整数相乘的积。该程序在VC++2015开发平台调试通过。测试结果表明,当每个分组数据位数多时,运算速度显著提高。
修改BUG:数值计算支持库“大数.四舍五入()”命令在最高位进位时,会导致程序异常。 17. 修改BUG:办公组件支持库打印进度对话框的标题和用户设置的内容不一致。 18. 修改BUG:办公组件静态编译后无法正常销毁。 ...