public void testMul() throws Exception{
String p1 = "123456789012345678901234123456789012345678901234";//"123456789012345678901234";
String p2 = "987654321098765432109876543210987654123456789012345678901234";//"987654321098765432109876543210987654";
int ASCII = 48;
char[] result = new char[p1.length() + p2.length()];
for(int i = 0; i < result.length; i++){
result[i] = '0';
}
char ctemp = ' ';
char[] pc1 = p1.toCharArray();
for(int i = 0 ; i < pc1.length/2; i++){
ctemp = pc1[i];
pc1[i] = pc1[pc1.length - 1 - i];
pc1[pc1.length - 1 - i] = ctemp;
}
char[] pc2 = p2.toCharArray();
for(int i = 0 ; i < pc2.length/2; i++){
ctemp = pc2[i];
pc2[i] = pc2[pc2.length - 1 - i];
pc2[pc2.length - 1 - i] = ctemp;
}
int temp = 0;//临时结果
int step = 0;//进位
int time = 0;//次数
int bit = 0;//位数
for(char c1 : pc1){
time = bit;
for(char c2 : pc2){
temp = (c1 - ASCII) * (c2 - ASCII);
temp = temp + result[time] -ASCII;
if(temp > 9){//进位
int i = 0;
do{
result[time + i] = (char)(temp % 10 + ASCII);
step = (temp - temp % 10) / 10;
i++;
temp = result[time + i] - ASCII + step;
}while(temp > 9);
result[time + i] = (char)(temp + ASCII);
}else{
result[time] = (char)(temp + ASCII);
}
time++;
}
bit++;
}
System.out.println("##############################");
System.out.print(p1 + " x " + p2 + " = ");
for(int i = result.length - 1; i >= 0; i--){
System.out.print(result[i]);
}
System.out.println();
System.out.println("##############################");
}
分享到:
相关推荐
### 分治法求两个大整数相乘 #### 一、问题背景及描述 在计算机科学领域,处理大整数的运算是一项常见的需求,尤其是在密码学、数据加密以及某些科学计算场景中。对于传统整数类型(如 `int`, `long` 等)无法表示...
本篇文章将详细讨论如何使用C语言来实现两个1000位数字相乘的算法。这个程序是针对大数相乘问题的一个解决方案,适用于处理超过常规整型变量范围的大型整数。 首先,我们需要理解C语言的基础数据类型,如int、long...
这段代码提供了一个具体的实现思路,通过将两个大整数分别存储为字符数组,并利用逐位相乘的方法来实现乘法运算。具体步骤如下: 1. **初始化**:首先定义一个足够大的数组`s`用于存放乘法的结果,其长度等于两个...
5. 模乘算法:将两个超大数字相乘,得到结果,并将结果取模。 在椭圆曲线密码体制中,大数计算的算法问题尤为重要。椭圆曲线密码体制是一种基于椭圆曲线数学的密码体制,它的安全性依赖于椭圆曲线上的难题,例如...
以下是对“任意大的两个数相乘”这个知识点的详细说明。 **大数的概念** 大数是指超过常规数据类型所能表示的最大值的整数。在大多数编程语言中,如C、C++或Java,整型变量有其最大值限制,如32位系统中的int最大值...
在编程领域,尤其是在处理数值...总之,处理两个超大数相乘的问题,需要理解大数表示和高效算法,并能够熟练运用C语言进行编程实现。通过学习和实践,不仅可以掌握这一技能,还能为解决其他复杂计算问题打下坚实基础。
本文将详细介绍如何使用C语言通过链表和数组实现两个大数的相乘功能,其中大数的位数可以达到上万位。 #### 题目概述 本题目要求设计一个程序,能够处理两个大数的相乘操作,这里的“大数”指的是位数可以达到上万...
1. **输入接收**:首先,使用字符数组接收用户输入的两个大整数,这是因为C++的标准输入流`cin`无法直接处理超过`int`类型的整数。字符数组可以用来存储任意长度的字符串形式的数字。 2. **数据转换**:接收到的...
这个压缩包中的内容显然是一个关于长整型相乘的实现程序,包含两个源文件(test.cpp、LongIntMultiply.cpp)和一个头文件(LongIntMultiply.h)。这里我们将详细讨论长整型的概念、实现方法以及可能涉及的算法。 1....
在具体实现上,首先,输入的两个大整数会被转换成8的倍数,这是因为分治法的处理过程中,需要对每一位进行操作,8的倍数可以使处理更为简洁。接着,通过递归调用,将大整数逐步分解到单个数字的乘法,直到乘法操作...
那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下: 代码如下: console.log(bigMut(“567”, “1234”)); // 699678 function bigMut(big, common) { big += “”; common += “”; if (big.length < ...
在传统的算术运算中,我们通常使用乘法运算符 `*` 来完成两个数字的乘法,但在处理大整数时,这种方法不再适用,因为标准数据类型无法存储这样的结果。 在C++中,我们可以利用自定义数据结构(如链表、数组等)来...
当两个整型数相乘的结果超出了该数据类型能表示的最大值,就会发生溢出(overflow)。溢出并不总是导致编译错误,而是可能导致运行时错误,因为计算结果将不再正确。例如,32位无符号整型最大能表示4294967295,如果...
假定有两个字符串表示的整形数,要求写一个函数,实现两个数字字符串的乘积,函数返回值也是字符串。我们不能直接将整形字符串转换为数字后去相乘,因为字符串表示的数字可能相当大,直接转换成数字会导致信息丢失,
1. 将两个大整数a和b分解为: a = a1 * 2^k + a0 b = b1 * 2^k + b0 其中a1和b1是a和b各自高半部分,a0和b0是低半部分,k是适当的选择。 2. 计算三个中间值: - z0 = a0 * b0 - z1 = (a0 + a1) * (b0 + b1) -...
它将两个n位数的乘法分解为三个较小的乘法和若干次加法,复杂度为O(n^1.585),比传统的O(n^2)算法更快。基本思想是将两个数各分为高位和低位两部分,然后用这三个部分的组合进行计算。 2. **Toom-Cook算法**:与...
由于两个20位的大数相乘,结果最多不超过40位,所以mResult的长度至少为2 * (MAX - 1),其中MAX为21。 2. **输入大数**:通过函数InputNumber读取用户输入的两个大数,将字符输入转换成整数数组表示。 3. **初始化...
在这个大整数相乘的问题中,我们就是用这种策略来高效地完成乘法运算。 一、基础理论 1. 大整数:大整数是指超过普通整型数据所能表示范围的整数,通常通过数组或链表等数据结构存储。 2. 分而治之:分而治之是算法...
3. **逐位乘法**:在C++中,这个过程涉及两个数组的逐个元素相乘,然后累加到结果数组。每个乘积都需要与另一个数组的相应位置进行对齐,然后根据需要进行进位操作。 4. **动态分配内存**:由于我们不知道输入的大...
标题“大数相乘c语言”和描述“两个超过计算机所能表示的数相乘,利用数组存储大数,进行相乘”所提及的就是这种技术。 大数相乘的基本思路是将每个大数拆分成数组中的每一位,然后按照传统的笔算乘法方法进行计算...