大数相乘

算法提高 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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值