前言 : 实现大数相乘比相加要难一点 , 但是仔细分析会发现很多共同之处
分析 :
1. 由数学归纳法会发现用一般的两数相乘方法计算 , 每计算一次都能够确定最终结果的一位数字
2. 比如说 : 456 * 123
下面我用草稿描述 , 字丑请见谅 .............
3. 第一步我们可以确定个位 , 第二步可以确定十位 , 第三步是百位 .......以此类推 , 第n步由n个步骤才能最终确定 , 所以代码也就呼之欲出了
#include #include #include char * MultipyBigNumber(char *s,char *p); /* 函数声明 */
int main()
{
char s[] = "100000000000000000000000000000000000000";
char p[] = "99999999999999";
puts(MultipyBigNumber(s,p));
return 0;
}
char* MultipyBigNumber(char *s,char *p)
{
int i,j,x,bit1,bit2;
int len1 = strlen(s);
int len2 = strlen(p);
int len3 = len1 + len2; /* 结果的位数最大应为两个长度相加 */
char *arr;
arr = (char*)malloc(sizeof(char)*(len3+1));
arr[len3] = '\0';
arr = &arr[len3];
len1--;
len2--;
i = x = 0;
while(i < len3 - 1 || x != 0)
{
for(j = 0; j <= i; j++)
{
bit1 = len1 - i + j; /* 第一个数从当前最高位开始递减到个位 */
bit2 = len2 - j; /* 第二个数从个位到当前最高位 */
if(bit1 >= 0 && bit2 >= 0) /* 当两个位数都有效才相乘,防止出现位数不相称情况 */
x += (s[bit1] - '0') * (p[bit2] - '0');
}
*(--arr) = x % 10 + '0';
x /= 10;
i++;
}
if(*arr++ == '0') /* 如果结果为0,只返回一个0即可,不用返回n个0 */
*arr = '\0';
return --arr;
}
例 :
char s[] = "100000000000000000000000000000000000000";
char p[] = "99999999999999";

大数相乘算法详解:逐位计算与代码实现
本文详细介绍了如何使用数学归纳法和逐位相乘的方法计算大数乘法,并通过实例演示了如何利用C语言编写实现过程。通过步骤分析,展示了从个位到高位确定结果的技巧,适合理解大数乘法原理的编程初学者。
4903

被折叠的 条评论
为什么被折叠?



