描述

在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。
  现在输入两个整数,请输出它们的乘积。

输入

输入描述:
  两行,每行一个正整数,每个整数不超过10000位
输入样例:
99
101

输出

输出描述:
  一行,两个整数的乘积

输出样例:
9999

高精度乘法
我们可以根据这个图也就是我们乘法的过程 来思考这个问题 。
第一步 存数
第二步 处理位计算
第三步 输出
其实 核心就在于处理位计算,

#include<cstdio>
#include<cstring>
using namespace std;
	char A[10001],B[10001];
	int a[10001],b[10001],c[1000001],x,i,l3,l1,l2,j;
int main()
{
    scanf("%s%s",A,B);
	l1=strlen(A);
	l2=strlen(B);
    for (i=0;i<=l1-1;i++)
	 a[l1-i]=A[i]-48;    
	for (i=0;i<=l2-1;i++)
	 b[l2-i]=B[i]-48;     
	for(i=1;i<=l1;i++)
	 	{
		 x=0;
		for(j=1;j<=l2;j++)
		{
			c[i+j-1]=a[i]*b[j]+x+c[i+j-1];//乘积+进位+本数(就是乘法的下一行或者下下行这个位)
			x=c[i+j-1]/10;//进位
			c[i+j-1]%=10;//保留数
		 }
		 c[i+l2]=x;//可以看成图中第一步的c4,即每一次乘法的最大位。
	}
	l3=l1+l2;//考虑这个数最大的位数
	while(c[l3]==0&&l3>1)
	  l3--;//去掉开头的0
	for(i=l3;i>=1;i--)//输出
		printf("%d",c[i]);
	return 0;
}

相关文章: