c语言实现大数相乘,最简单的C语言实现大数相乘

前言 : 实现大数相乘比相加要难一点 , 但是仔细分析会发现很多共同之处

分析 :

1. 由数学归纳法会发现用一般的两数相乘方法计算 , 每计算一次都能够确定最终结果的一位数字

2. 比如说 : 456 * 123

下面我用草稿描述 , 字丑请见谅 .............a51dcae2c15577572bc18f0b939c3c8f.png

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";

7b26368172350e31c38a95fee12f59b7.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值