大数相乘

算法提高 P1001

当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.

输入:
  62773417 12345678

输出:
  774980393241726

#include<stdio.h>
#include<string.h>
int main()
{
	char a1[10000],b1[10000];
	int a[10000],b[10000],k[10000]={0};
	int c=0,i,j,t,f,m,n,i1,j1;
	scanf("%s %s",a1,b1);
	m=strlen(a1);n=strlen(b1);	
	for(i=m-1;i>=0;i--)
	a[c++]=(a1[i]-'0');
	a[c]='\0';
	c=0;
	for(i=n-1;i>=0;i--)
	b[c++]=(b1[i]-'0');
	b[c]='\0';

	for(i=0;i<m;i++)
	for(j=0;j<n;j++){
		t=a[i]*b[j];
		f=i+j;
		k[f]+=(t%10);
		k[f+1]+=(t/10);		
		while(k[f]>=10){
			k[f+1]+=(k[f]/10);
			k[f]=k[f]%10;			
			f++;
		}
	}
	
	c=m+n-1;
	if(a[m-1]*b[n-1]>=10) c++;
	
	while(k[c-1]==0&&c!=1) c--;
	
	for(i=c-1;i>=0;i--)
	printf("%d",k[i]);
	
	return 0;
}
}

自己都佩服自己了 哈哈哈
开始搜了一下 看别人还用递归……算了吧 还是自己写

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