`
henghengdh
  • 浏览: 155714 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

两个大数字的相乘

 
阅读更多
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语言来实现两个1000位数字相乘的算法。这个程序是针对大数相乘问题的一个解决方案,适用于处理超过常规整型变量范围的大型整数。 首先,我们需要理解C语言的基础数据类型,如int、long...

    华为的一道面试题,两个长数字相乘

    这段代码提供了一个具体的实现思路,通过将两个大整数分别存储为字符数组,并利用逐位相乘的方法来实现乘法运算。具体步骤如下: 1. **初始化**:首先定义一个足够大的数组`s`用于存放乘法的结果,其长度等于两个...

    任意大的两个数相乘

    以下是对“任意大的两个数相乘”这个知识点的详细说明。 **大数的概念** 大数是指超过常规数据类型所能表示的最大值的整数。在大多数编程语言中,如C、C++或Java,整型变量有其最大值限制,如32位系统中的int最大值...

    两个很大的整形数相乘

    在编程领域,尤其是在处理数值...总之,处理两个超大数相乘的问题,需要理解大数表示和高效算法,并能够熟练运用C语言进行编程实现。通过学习和实践,不仅可以掌握这一技能,还能为解决其他复杂计算问题打下坚实基础。

    用C实现两个大数的相乘(位数可以上万)

    本文将详细介绍如何使用C语言通过链表和数组实现两个大数的相乘功能,其中大数的位数可以达到上万位。 #### 题目概述 本题目要求设计一个程序,能够处理两个大数的相乘操作,这里的“大数”指的是位数可以达到上万...

    两个10位以上大整数相乘 算法 设计

    1. **输入接收**:首先,使用字符数组接收用户输入的两个大整数,这是因为C++的标准输入流`cin`无法直接处理超过`int`类型的整数。字符数组可以用来存储任意长度的字符串形式的数字。 2. **数据转换**:接收到的...

    长整型相乘的实现程序

    这个压缩包中的内容显然是一个关于长整型相乘的实现程序,包含两个源文件(test.cpp、LongIntMultiply.cpp)和一个头文件(LongIntMultiply.h)。这里我们将详细讨论长整型的概念、实现方法以及可能涉及的算法。 1....

    JS实现两个大数(整数)相乘

    那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下: 代码如下: console.log(bigMut(“567”, “1234”)); // 699678 function bigMut(big, common) { big += “”; common += “”; if (big.length &lt; ...

    分治 大整数相乘

    在传统的算术运算中,我们通常使用乘法运算符 `*` 来完成两个数字的乘法,但在处理大整数时,这种方法不再适用,因为标准数据类型无法存储这样的结果。 在C++中,我们可以利用自定义数据结构(如链表、数组等)来...

    算法分析与设计论文-可溢出的两个整型数相乘

    当两个整型数相乘的结果超出了该数据类型能表示的最大值,就会发生溢出(overflow)。溢出并不总是导致编译错误,而是可能导致运行时错误,因为计算结果将不再正确。例如,32位无符号整型最大能表示4294967295,如果...

    大整数相乘.cpp

    假定有两个字符串表示的整形数,要求写一个函数,实现两个数字字符串的乘积,函数返回值也是字符串。我们不能直接将整形字符串转换为数字后去相乘,因为字符串表示的数字可能相当大,直接转换成数字会导致信息丢失,

    超大整数相乘算法的VB实现源代码

    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位的大数相乘

    由于两个20位的大数相乘,结果最多不超过40位,所以mResult的长度至少为2 * (MAX - 1),其中MAX为21。 2. **输入大数**:通过函数InputNumber读取用户输入的两个大数,将字符输入转换成整数数组表示。 3. **初始化...

    大整数相乘问题--分而治之

    在这个大整数相乘的问题中,我们就是用这种策略来高效地完成乘法运算。 一、基础理论 1. 大整数:大整数是指超过普通整型数据所能表示范围的整数,通常通过数组或链表等数据结构存储。 2. 分而治之:分而治之是算法...

    大整数相乘(C++实现),理论上整数位数任意

    3. **逐位乘法**:在C++中,这个过程涉及两个数组的逐个元素相乘,然后累加到结果数组。每个乘积都需要与另一个数组的相应位置进行对齐,然后根据需要进行进位操作。 4. **动态分配内存**:由于我们不知道输入的大...

    大整数相乘算法 分治法

    在具体实现上,首先,输入的两个大整数会被转换成8的倍数,这是因为分治法的处理过程中,需要对每一位进行操作,8的倍数可以使处理更为简洁。接着,通过递归调用,将大整数逐步分解到单个数字的乘法,直到乘法操作...

    大数相乘c语言

    标题“大数相乘c语言”和描述“两个超过计算机所能表示的数相乘,利用数组存储大数,进行相乘”所提及的就是这种技术。 大数相乘的基本思路是将每个大数拆分成数组中的每一位,然后按照传统的笔算乘法方法进行计算...

Global site tag (gtag.js) - Google Analytics