版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}