c语言大数的加法和乘法,【C语言】超大数乘法运算

昨天做排列组合的时候遇到A(a,b)这个问题,需要计算A(20,20)超大,计算机32位的,最大数只能是2^32,这让我很悲伤!

于是乎就自己研究了如何进行超大数的计算!

/*********************************************************************************

* Copyright: (C) 2013 Chen ZhenWei

* All rights reserved.

*

* Filename: bignum.c

* Description: This file

*

* Version: 1.0.0(12/12/2013~)

* Author: Chen ZhenWei

* ChangeLog: 1, Release initial version on "12/12/2013 08:21:23 AM"

*

********************************************************************************/

#include

#include

int save_num(const char *str,unsigned short *num)

{

int i=0;

int length = strlen(str);

for(i=0; i

{

// printf("%c == %c

",str[length-1-i*2],str[length-2-i*2]);

num[i] = (str[length-1-i*2]-'0')+10*(str[length-2-i*2]-'0');

}

if(length%2 != 0)

{

num[i] = str[0] - '0';

return i+1;

}

return i;

}

void main()

{

unsigned short numa[100];

unsigned short numb[100];

unsigned short result[200];

unsigned short carry;

int i=0,j=0,lena,lenb,res_len;

char strnum[64];

char flag;

scanf("%s",strnum);

lena = save_num(strnum,numa);

//scanf("%c",&flag);

scanf("%s",strnum);

lenb = save_num(strnum,numb);

memset(result,0x0,200*2);

for(i=0; i

for(j=0; j

{

carry = numa[j] * numb[i];

result[j+i] += carry%100;

result[j+i+1] += carry/100;

}

res_len = j+i+1;

for(i=0; i

{

if(result[i]>=100)

{

result[i+1] += result[i]/100;

result[i] = result[i]%100;

}

}

for(i=res_len; i>0; i--)

{

printf("%02d",result[i-1]);

}

printf("

");

}

设计思路:

3dcf7312b71c8fb31b36a5da2bf228ee.png

操作结果:

558fbdf88930f7fdfde2d19ba5f9bb99.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值