大整数的加法和乘法运算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/walkandthink/article/details/41758915

用数组实现的大整数的加法和乘法运算。

计算结果为:


具体代码为:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

void Show()
{
	cout<<"********************************"<<endl;
	cout<<"*** 大整数运算! V1.0版本     ***"<<endl;
	cout<<"*** 本程序支持:               ***"<<endl;
	cout<<"*** 任意长整数的加法、乘法运算 ***"<<endl;
	cout<<"*** 结果保存于result.txt文件  ***"<<endl;
	cout<<"********************************"<<endl;
}

int main()
{
	ofstream outf;
	outf.open("result.txt",ios::out);
	string str1,str2;
	int *num1,*num2,*num,*snum;
	int len1,len2,len;

	int i,j,flag;

	Show();

	cout<<"请输入第一个数:";
	cin>>str1;
	cout<<"请输入第二个数:";
	cin>>str2;

	outf<<"您输入的第一个数为:"<<endl;
	outf<<str1<<endl;
	outf<<"您输入的第二个数为:"<<endl;
	outf<<str2<<endl;
	outf<<endl;

	len1=str1.length();
	len2=str2.length();
	if (len1>=len2)
	{
		len=len1;
	}
	else
	{
		len=len2;
	}

	num=new int[len+2];
	num1=new int[len+1];
	num2=new int[len+1];
	snum=new int[2*(len1+len2)+1];

	for (i=1;i<=len;i++)
	{
		if (i<=len1)
		{
			num1[i]=str1.at(len1-i)-'0';
		}
		else
		{
			num1[i]=0;
		}

		if(i<=len2)
		{
			num2[i]=str2.at(len2-i)-'0';
		}
		else
		{
			num2[i]=0;
		}
		num[i]=0;
	}
	num[len+1]=0;
	for (i=1;i<=2*(len1+len2);i++)
	{
		snum[i]=0;
	}

	for (i=1;i<=len;i++)
	{
		num[i]+=num1[i]+num2[i];
		if(num[i]>=10)
		{
			num[i+1]+=num[i]/10;
			num[i]=num[i]%10;
		}
	}
	
	cout<<"加法运算结果为:"<<endl;
	outf<<"加法运算结果为:"<<endl;
	if(num[len+1]==0)
	{
		for (i=len;i>=1;i--)
		{
			cout<<num[i];
			outf<<num[i];
		}
		cout<<endl;
		outf<<endl;
	}
	else
	{
		for (i=len+1;i>=1;i--)
		{
			cout<<num[i];
			outf<<num[i];
		}
		cout<<endl;
		outf<<endl;
	}
	
	//***********************************
	//进行乘法运算
	for (i=1;i<=len2;i++)
	{
		for (j=1;j<=len1;j++)
		{
			snum[i+j-1]+=num2[i]*num1[j];
		}
	}
	for (i=1;i<=2*(len1+len2);i++)
	{
		if (snum[i]>=10)
		{
			snum[i+1]+=snum[i]/10;
			snum[i]=snum[i]%10;
		}
	}
	for (i=2*(len1+len2);i>=1;i--)
	{
		if(snum[i]!=0)
		{
			flag=i;
			break;
		}
	}
	cout<<"乘法运算的结果为:"<<endl;
	outf<<"乘法运算的结果为:"<<endl;
	for (i=flag;i>=1;i--)
	{
		cout<<snum[i];
		outf<<snum[i];
	}
	cout<<endl;
	outf<<endl;

	delete[] num;
	delete[] num1;
	delete[] num2;
	delete[] snum;

	return 0;
}


猜你喜欢

转载自blog.csdn.net/walkandthink/article/details/41758915