60分求助
查看原帖
60分求助
1041765
AKkkk_TIX楼主2024/8/7 18:57
//大整数存储:	0下标存储个位数,
//		实现:	以字符串方式输入大整数,转换字符数组为数字数组,逆置数字数组
#include<iostream>
#include<cstring>
using namespace std;
char c1[101],c2[101];
int x[100],y[100],z[101];

int main()
{
	freopen("bignumber.in","r",stdin);
	//freopen("bignumber.out","w",stdin);
	
	//输入大整数到字符数组 
	cin>>c1>>c2;
	
	//字符转换数字 
	int len1=strlen(c1);
	int len2=strlen(c2);
	//cout<<len1; 
	for(int i=0;i<len1;i++)
		x[i]=c1[i]-'0';
	for(int i=0;i<len2;i++)
		y[i]=c2[i]-'0';
	//for(int i=0;i<len1;i++)
	//	cout<<a[i]<<" ";
	
	//逆置 
	for(int i=0;i<len1/2;i++)
		swap(x[i],x[len1-1-i]);
	for(int i=0;i<len2/2;i++)
		swap(y[i],y[len2-1-i]);
	//for(int i=0;i<len2;i++)
	//	cout<<y[i]<<" ";
	//cout<<endl;
	
	//消除前导零
	for(int i=len1-1; i>0&&x[i]==0; len1--,i--);
	for(int i=len2-1; i>0&&y[i]==0; len2--,i--); 
	
	if(len1==1&&x[0]==0||len2==1&&y[0]==0)
	{
		cout<<0;
		return 0;
	}
	
	//a*b
	for(int i=0;i<len1;i++)
		for(int j=0;j<len2;j++)
		{
			z[i+j]+=x[i]*y[j];
			z[i+j+1]+=z[i+j]/10;
			z[i+j]=z[i+j]%10;
		}
	
	//位数判断 
	int len=len1+len2;
	if(z[len-1]==0)
		len--;
	
	//输出大整数	
	for(int i=len-1;i>=0;i--)
		cout<<z[i];	
}
 

测评记录(O2)

测评记录(无O2)

2024/8/7 18:57
加载中...