四:大数运算-乘法运算

问题:大数-乘法运算
题目描述

请计算两个整数相乘(数的范围为:0 <= num < 10 ^ 100)
输入
两个整数
输出
一个整数
样例输入
10000000
10000000
样例输出
100000000000000

#include<stdio.h>
#include<string.h>
#define M 1000000
int Inter_Sum[M];
int Inter_jie[M];
int g;
//char Inter_Char[M];
void fun(int str1[],int str[],int s,int p){
	int t,m=0,i=0,two=0;
	int k=0;
	/*printf("1\n");
	for( int j=s-1;j>=0;j--){
			
		printf("%d ",str1[j]);
	}
	printf("\n");
	printf("2\n");
		for( int j=p;j>=0;j--){
		printf("%d ",str[j]);
	}
	printf("\n");*/
	while(i<s){
			if(two<=p)
		 t=(str1[i])+(str[two])+m;
		 
		 else {
		 	t=(str1[i])+m;
		 }
		 //printf("t=%d i=%d two=%d\n",t,i,two);
		 //printf("str1[i]=%d str[two]=%d\n",str1[i],str[two]);
		if(t<10){
			Inter_Sum[k]=t;
			m=0;
		}else{
			Inter_Sum[k]=t%10;
			m=t/10;
		}	
		k++;
		two++;
		if(i==s-1&&m!=0)Inter_Sum[k++]=m; 
		i++;
	}
	
	//printf("\n");
	g=k;
}
void f(char str1[],char str2[]){
	int t,p=0,i=strlen(str1);
	//int Inter_jie[10000][10000];
	memset(Inter_Sum,-1,sizeof(Inter_Sum));
	int k,j,l;
	int index=0;
	while(1){
		for(k=strlen(str2)-1;k>=0;k--){
			int m=0;
			int p=strlen(str2)-1-k;
			//printf("str2[k]=%d\n",str2[k]-48);
			l=p;
			//printf("l=%d\n",l);
			while(l--)Inter_jie[l]=0;
			for(j=strlen(str1)-1;j>=0;j--){
				t=(str1[j]-48)*(str2[k]-48)+m;
				//printf("t=%d\n",t);
				if(t<10){
					Inter_jie[p]=t;
					m=0;
				}else{
					Inter_jie[p]=t%10;
					m=t/10;
				}
				//printf("t=%d\n",t);
				p++;
				if(j==0&&m!=0)Inter_jie[p++]=m; 
			}
		
		/*for( int j=p-1;j>=0;j--){
			
		printf("%d ",Inter_jie[j]);
	}
	printf("\n");*/
			while(Inter_Sum[index++]!=-1);
			fun(Inter_jie,Inter_Sum,p,index-2);
			//printf("index=%d\n",index);
		}
		//printf("p=%d\n",p);
		break;
	}
	//printf("index=%d\n",index);
	
}
int main(){
	
	char str1[M];
	char str2[M];
	//memset(Inter_Sum,0,sizeof(Inter_Sum));
	int i=0,j=0;
	scanf("%s %s",str1,str2);
	str1[strlen(str1)]='\0';
	str2[strlen(str2)]='\0';
	//printf("%d %d\n",strlen(str1),strlen(str2));
	if(strlen(str1)>=strlen(str2))
	f(str1,str2);
	else f(str2,str1);
	for(j=g-1;j>=0;j--){
		printf("%d",Inter_Sum[j]);
	}
	return 0;
}

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/yuming226/article/details/78917030
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞