import java.io.*;
//数据类封装
class IntString {
public int len;
public int[] digits;
public IntString() {
len = 0;
digits = null;
}
}
//算法实现类
public class BigInt {
public BigInt() {
}
public static void main(String[] args) throws java.io.IOException {
System.out.println("Input two large integers:");
IntString intt1 = new IntString();
IntString intt2 = new IntString();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//通过空格实现字符串分段
String str[] = (reader.readLine()).split("\\s+");
intt1.digits = convert(str[0]);
intt1.len = str[0].length();
intt2.digits = convert(str[1]);
intt2.len = str[1].length();
int[] a = intt1.digits;
int[] b = intt2.digits;
int alength = intt1.len;
int blength = intt2.len;
IntString intt3 = new IntString();
intt3.len = alength + blength - 1;
int clength = intt3.len;
int[] c = new int[1000];
for (int i = 0; i < alength; i++)
for (int j = 0; j < blength; j++)
c[i + j] += a[i] * b[j];
for (int i = 0; i < c.length; i++) {
if (c[i] > 9) {
c[i + 1] += c[i] / 10;
c[i] = c[i] % 10;
}
}
intt3.digits = c;
clength = intt3.len;
System.out.println(clength);
System.out.println("the result is: ");
for (int i = clength - 1; i >= 0; i--) {
System.out.print(c[i]);
}
}
//将字符串逆序
public static int[] convert(String str) {
int length = str.length();
int[] tem = new int[length];
for (int i = 0; i < str.length(); i++) {
tem[i] = str.charAt(length - i - 1) - '0';
}
return tem;
}
}
分享到:
相关推荐
- 大数相乘函数Multiply:核心算法,按照前述的设计思路,通过栈来处理大数的逐位乘法和进位。 5. 编码实现: 代码使用C语言编写,包含了对栈的各种操作,如销毁、压栈、大数相加、位移等。每个函数都对应着上述...
大数相乘的目标是设计一种算法,可以在不考虑计算机内存限制的情况下,准确地计算任意大小的大数乘积。 2. **设计思路**: 设计的关键在于如何有效地存储大数并处理乘法中的进位问题。报告中采用了栈来存储大数,...
大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码大数相乘算法源代码...
在计算机科学中,大数相乘是处理超过标准整型数据范围的数字乘法问题。在C语言中,由于标准库并不直接支持大数运算,...通过理解这些概念,你可以根据提供的“大数相乘算法”文件进一步学习和实现自己的大数相乘程序。
本主题将深入探讨大数相乘的算法原理、源码分析及其实现。 大数相乘的基本思路通常包括以下几种方法: 1. **基础位操作**:这是最直接的方法,类似于小学时学习的竖式乘法。每一对对应的位相乘后累加,但这种做法...
大数相乘的算法多种多样,其中包括经典的Karatsuba算法、Toom-Cook算法,以及更为高效的FFT(快速傅里叶变换)算法。其中,Karatsuba算法是一种分治策略,它将两个数分别拆分为较小的部分,然后利用递归关系进行计算...
在大数相乘中,分治算法通常表现为Karatsuba算法或Toom-Cook算法。以Karatsuba算法为例,它是1960年由苏联数学家Alexey Karatsuba提出的。该算法将两个n位数A和B分为两部分:A = a * 10^(n/2) + b,B = c * 10^(n/2)...
大数相乘的实现相对复杂一些,常见的方法有Karatsuba算法、Toom-Cook算法或更高效的FFT(快速傅里叶变换)方法。这里我们简述一种朴素的算法——扩展的乘法法则,也就是将大数拆分为单个位,然后按位相乘并累加。 1...
2. **计算**:根据所选择的算法进行大数相乘操作。 3. **输出**:将计算结果转换回字符串形式,并打印到屏幕上。 4. **内存管理**:注意在运算过程中管理好动态分配的内存,避免内存泄漏。 实现大数相乘的过程中...
【大数相乘算法解析】 在计算机科学中,处理大数是常见的问题,尤其是在加密算法、数学计算或金融计算等领域。对于20位左右的大数相乘,我们可以通过设计特定的算法来高效地完成。这里介绍一种基于数组表示的大数...
在编程领域,尤其是在C语言中处理大数运算是一项挑战,...在提供的压缩包文件“dashuxiangcheng”中,很可能包含了实现上述逻辑的C语言源代码,通过阅读和分析这些代码,可以更深入地理解大数相乘的算法和实现细节。
大数相乘算法,java代码,包含独立大数相加算法 其中bigNumberPlus(String s1,String s2)为大数相加方法 bigNumberMultiply(String s1,String s2)为大数相乘方法
大数相乘算法,用CSharp实现,经过测试,应该没错了
由于大整数的位数较多,因此需要设计合适的数据结构和算法来实现大数相乘。该设计中,使用了一维数组a[ ]和b[ ]来存储大整数a和b,然后使用sum函数来计算大数相乘的结果。 sum函数的实现过程如下: 首先,定义一个...
这里我们关注的焦点是大数相乘、大数相加以及大数阶乘的算法实现,这些都是计算密集型任务,尤其是在处理极端数值时。下面将详细介绍这三个知识点,并提供一个使用C++实现的示例。 1. **大数相乘**: 大数相乘通常...
两大数相乘,算法,数组,C语言.。。。。。。
数据结构课程设计大数相乘是一项常见的编程任务,它涉及到计算机科学中的算法设计与实现,特别是在数据处理和计算效率方面。在这个项目中,主要的知识点包括大数表示、大数运算以及C语言的基础编程技巧。 首先,...
总的来说,实现大数相乘涉及到了数组操作、字符与数字的转换、进位处理等多个编程概念,这对于理解和掌握高级算法至关重要。通过熟练掌握这种方法,你可以处理任意大小的大数乘法,而不仅仅是几万以内的数。
本文将深入分析一个使用字符数组实现的大数相乘算法,并通过具体的代码进行解释。 #### 二、问题背景与需求 在很多情况下,我们可能需要处理非常大的数字,这些数字超出了基本数据类型(如`int`、`long`等)所能...