加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

超级大 正整数 乘法

发布时间:2020-12-14 03:31:16 所属栏目:大数据 来源:网络整理
导读:/* Two big integer multiplied eg.22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

/*

 Two big integer multiplied

 eg.

2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222


2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
 * 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211
111 =
1234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234
320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654321

*/

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

char s1[10000];	// num1
char s2[10000];	// num2

int a1[10000];	// i of s1	* s2
int a2[10000];	// last ans
int ans[10000];	// current ans


void mulBigData(char *s1,char *s2){
	int i1,i2;			// for s1,s2 traversal
	int len1,len2;		// length of s1,s2
	int la1,la2,lan;	// length of a1,a2,ans
	int ai,ani;		// for a1,ans traversal

	// eg. 123 * 12		-> 12 * 123
	// make s1 is short and s2 is long
	len1 = strlen(s1);
	len2 = strlen(s2);
	if(len1 > len2){
		char *tmps = s1;
		s1 = s2;
		s2 = tmps;
		len1 = strlen(s1);
		len2 = strlen(s2);
	}
	//printf("s1 = %s,s2 = %sn",s1,s2);


	// init a1,ans
	for(ai=0; ai<100; ai++){
		a1[ai] = 0;
		a2[ai] = 0;
		ans[ai] = 0;
	}
	la1 = 0;
	la2 = 0;
	lan = 0;
	

	// s1 * s2
	int v1,v2;	
	int j = 0;
	int z = 0;
	// eg. 12 * 123
	for(i1 = len1 - 1; i1 >= 0; i1--){
		// i of s1 * s2
		v1 = s1[i1] - '0';
		z = 0;
		for(ai=0; ai<j; ai++){	// carry bit
			a1[ai] = 0;
		}
		j++;


		// eg. 2 * 123   10 * 123
		for(i2 = len2 - 1; i2 >=0 ;i2--){
			v2 = s2[i2] - '0';
			int vv = v1 * v2;
			a1[ai++] = (vv % 10) + z;
			z = vv / 10;
		}
		if(z != 0){
			a1[ai++] = z;
		}
		la1 = ai;
		

		// ans += i of s1 * s2
		la2 = lan;
		for(ani = 0; ani < lan; ani++){
			a2[ani] = ans[ani]; //  copy ans to a2
		}		
		// show a1 and a2
//		printf("a1 = ");
//		for(ai=la1-1; ai>=0; ai--){
//			printf("%d",a1[ai]);
//		}printf("n");

//		printf("a2 = ");
//		for(ai=la2-1; ai>=0; ai--){
//			printf("%d",a2[ai]);
//		}printf("n");


		int az = 0;
		int asum = 0;
		for(ani=0; ani<la1 || ani<la2; ani++){
			asum = 0;
			if(ani < la1){
				asum += a1[ani];
			}
			if(ani < la2){
				asum += a2[ani];
			}
			asum += az;
			ans[ani] = asum % 10;
			az = asum / 10;
		}
		if(az != 0){
			ans[ani++] = az;
		}
		lan = ani;
		
		// show current ans
//		printf("ans = ");
//		for(ai=ani-1; ai>=0; ai--){
//			printf("%d",ans[ai]);	
//		}printf("nn");
	}
	
	// output the final answer!
	printf("n%s * %s =n",s2);

	while(ans[--ani] == 0) ani--;	
	if(ani < 0)printf("0");

	for(ai=ani; ai>=0; ai--){
		printf("%d",ans[ai]);	
	}printf("nn");

}// end of mulBigData() 

int main(){
	while(scanf("%s %s",s2)){
		mulBigData(s1,s2);
	}
	return 0;
}
/*

2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222


2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
 * 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211
111 =
1234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234
320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654321

*/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读