/**
* 关于两个大的数值相乘
* 思路解决:
* 将Str类型转换成一个对象存取 包括 长度以及数组存取Str的值
* 然后将两个数组相乘 存放在第三个数值中 然后将大于9的向前近卫
* 最后打印出这个相乘的
* 数组
*
* @author meachalyang
* @since 2011-01-07
*
*/
public class test {
public static void main(String[] args) {
//创建一个定义输入的编辑器
/**
* 创建一个编辑器 用于输入字符
*
*/
System.out.println("Input two large integers:..");
BufferedReader buffer=new BufferedReader(new InputStreamReader(System.in));
String[] strArry =null;
try {
strArry= buffer.readLine().split("*");
} catch (IOException e) {
// TODO Auto-generated catch bloc
e.printStackTrace();
}
/**
* 定义两个字符串变量 获取输入的值
* 这段代码 请不要严格 计较 哈哈
*/
String strMulA=strArry[0];
String strMulB=strArry[1];
/**
* 将输入的字符串变量转换到与字符串本身等长的数组中
*/
//写一个存储字符串并转换为数组的方法
int[]intMulA=strToArray(strMulA);
int[]intMulB=strToArray(strMulB);
//然后将这个两个数组相乘 并保存在第三个数组中
/* 定义第三个数组*/
/**
* 打印 frist num and second num len logs
*
*/
System.out.println("frist num len:"+intMulA.length);
System.out.println("second num len:"+intMulB.length);
//定义一个mul数组用于存取结果
int[]intMulResult=new int[intMulA.length+intMulB.length-1];
int num=0;
/**
* 根据两个转型后的数值 进行乘法运算
*/
getMulValue(intMulA, intMulB, intMulResult);
System.out.println("get mul len:"+intMulResult.length);
System.out.print("get mul :");
for (int i = 0; i < intMulResult.length; i++) {
System.out.print(intMulResult[i]);
}
}
/**
* 此方法封装了 得到获取乘集的算法
* 根据 frist num &second num 逐步相乘的原理 例如
* 222*321 可以拆分为 2*100*3*100+2*100*2*10+200*1
* + 2*10*3*100+2*10*20+20*1
* + 2*300+2*20+20*1
* 正好对应数组的每个索引位置
*
* 然后将每个索引位置大于9的向前进一位 并保留余数
* @param mulNumA 乘数1
* @param mulNumB 乘数2
* @param mulResult result
*/
private static void getMulValue(int[] mulNumA, int[] mulNumB, int[] mulResult) {
//拆分乘积算法
for (int i = 0; i < mulNumA.length; i++) {//222
//20 1 2*3+ 2*0+0*3+0*0
for (int j = 0; j < mulNumB.length; j++) {//333
mulResult[i+j]+=mulNumB[j]*mulNumA[i];
}
}
//200*321 71262
//222*1+222*20+222*300
//666[2]+6660[1]+66600[0]
// 200*300+200*20+200*1 64200
// 10*300+10*20+10*1 6420
// 2*300+2*20+2*1 642
//剔除intStr3数组中个位置上的大于9的数
for (int i = mulResult.length-1; i >0; i--) {
if(mulResult[i]>9){
mulResult[i-1]+=mulResult[i]/10;
mulResult[i]=mulResult[i] % 10;
}
}
}
/**
* 将字符串每个字符的值 定义并存储在数组中
* @param str 传入的字符串
* @return
*/
@SuppressWarnings("null")
public static int[] strToArray(String str)
{
int [] strToArray=new int[str.length()];
//写一个将str转为数组的方法 逐步遍历每个字符
int len=str.length();
if(str!=null&&!"".equals(str))
{
for (int i = 0; i < str.length(); i++) {
int num=str.charAt(i)-'0';
strToArray[i]=num;//charAt方法返回ASII吗 所以这里要减去0对应的ASII
}
}
return strToArray;
}
}
分享到:
相关推荐
在计算机科学中,大数相乘是...总的来说,理解和实现大数相乘算法不仅有助于提升计算效率,也是深入理解计算机科学底层机制的关键步骤。通过源码分析,我们可以更好地了解算法的工作原理,并优化其在特定环境下的性能。
大数相乘算法是基础且关键的一环,它涉及到如何高效地计算两个超过普通整型变量所能表示范围的数的乘积。本主题将深入探讨如何用C语言实现大数相乘,并展示结果。 C语言本身并不直接支持大数运算,但我们可以自定义...
在计算机科学中,大数相乘是处理超过标准整型数据范围的数字乘法问题。在C语言中,由于标准库并不直接支持大数运算,...通过理解这些概念,你可以根据提供的“大数相乘算法”文件进一步学习和实现自己的大数相乘程序。
C/C++实现两个大数相乘的源代码,同理可以实现两个无限小数的相乘,实现原理都是一样的。看代码就能写出来。
两大数相乘,算法,数组,C语言.。。。。。。
大数相乘算法,java代码,包含独立大数相加算法 其中bigNumberPlus(String s1,String s2)为大数相加方法 bigNumberMultiply(String s1,String s2)为大数相乘方法
利用分治法设计一个计算两个n位的大整数相乘的算法,要求计算时间低于O(n2)。支持不同位数大数的相乘。
虽然这里仅实现了大数的乘法,但基于相同的思想,可以扩展实现两个大数的相除操作。通常,大数相除需要更复杂的算法,如长除法,这涉及到多次减法、取余和商的计算。 总结来说,大数相乘算法主要涉及数组的使用、位...
实现了两个大数相乘的小程序,数组大小可自行指定,欢迎大家进行验证
两个大数相乘-字符串实现两个大数相乘-字符串实现
大数相乘算法,用CSharp实现,经过测试,应该没错了
大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码...
标题“大数相乘c语言”和描述“两个超过计算机所能表示的数相乘,利用数组存储大数,进行相乘”所提及的就是这种技术。 大数相乘的基本思路是将每个大数拆分成数组中的每一位,然后按照传统的笔算乘法方法进行计算...
其中,Karatsuba算法是一种分治策略,它将两个数分别拆分为较小的部分,然后利用递归关系进行计算,时间复杂度为O(n^1.585)。Toom-Cook算法则是在Karatsuba基础上的扩展,适用于更多个数的相乘。而FFT算法则是通过...
这样,我们就实现了一个简单但功能完整的大数相乘算法,能够处理任意长度的字符串表示的大数相乘问题。 这种基于字符串的大数乘法算法虽然直观易懂,但在效率上可能不如Karatsuba或者更高级的算法如FFT(快速傅里叶...
通过汇编语言实现大数相乘,作业,调试成功
虽然Python内置的乘法运算可能已经足够快,但对于特定场景,例如在性能受限的设备上或需要优化计算时间的场合,自定义的大数相乘算法如Karatsuba算法可能会提供显著的优势。 总的来说,理解并掌握大数相乘的分治...
大数相乘的实现相对复杂一些,常见的方法有Karatsuba算法、Toom-Cook算法或更高效的FFT(快速傅里叶变换)方法。这里我们简述一种朴素的算法——扩展的乘法法则,也就是将大数拆分为单个位,然后按位相乘并累加。 1...
本文将详细介绍如何使用C语言通过链表和数组实现两个大数的相乘功能,其中大数的位数可以达到上万位。 #### 题目概述 本题目要求设计一个程序,能够处理两个大数的相乘操作,这里的“大数”指的是位数可以达到上万...
本程序可以求出:任意位的两个大数相乘的结果。 已经实验过>2000位的两数相乘,有兴趣的话,你也试一试吧。 support me!thanks!