微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数相乘简单代码

只是简单实现,还没有优化,先放上来再说。看上去还有点乱,应该还会有更简单的方法


#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>

#define NUMLENTH   32
char *multibig(char *a,char *b,char *c)
{
	if(NULL == a || NULL == b || NULL == c){
		exit(0);
	}

	int len1,len2;
	len1 = strlen(a);
	len2 = strlen(b);

	int i,j;
	int len = len1 + len2 -2;
	for(i=len1-1;i>=0;i--){ 	/*因为是倒序的*/
		for(j=len2-1;j>=0;j--){
			int len3 = len - i - j;
			c[len3] += (a[i] - '0')*(b[j] - '0');
			if(c[len3] >= 10){
				c[len3+1] += (c[len3]/10);
				c[len3] %= 10;
				if(c[len3+1] >= 10){
					int k=2;
					c[len3+k]++;
					c[len3+1] %= 10;
					while(c[len3+k] >= 10){
						c[len3+k+1]++;
						c[len3+k] %= 10;
						k++;
					}
				}
			}
		}
	}

	return ;
}

int main(void)
{
	char *a = NULL;
	char *b = NULL;
	char *c = NULL;

	a =(char *) malloc(NUMLENTH);
	if(NULL == a){
		exit(0);
	}
	memset(a,NUMLENTH);

	b = (char *)malloc(NUMLENTH);
	if(NULL == b){
		exit(0);
	}
	memset(b,NUMLENTH);

	c = (char *)malloc(NUMLENTH*2+1);
	if(NULL == c){

		exit(0);
	}
	memset(c,NUMLENTH*2+1);

	printf("please input num 1:");
	scanf("%s",a);

	
	printf("please input num 2:");
	scanf("%s",b);

	multibig(a,b,c);	
	int flag = 0;
	int i=0;
	printf("the result:");
	for(i=NUMLENTH*2+1;i>=0;i--){
		if(*(c+i) != 0 || flag !=0){
			printf("%d",*(c+i));
			flag =1;
		}
	}
	printf("\n");
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐