3、求两个大整数的相乘问题

求两个大整数的相乘问题

日常常见的就是两个大整数相乘了。前面日志中曾经做过大数阶乘问题。其实问题都类似。只是前面当时用的是重复相加而得结果,然而,如果阶乘很大的话,重复相加也不能解决问题的,必须用数组来进行存储,然后模拟小学时竖式相乘的思想,即在一个数组中每个元素都只能是09,如果超越了这个界限,则进位到高位。在处理这个问题中,为了更好的思维,我们将其倒序,最后倒序输出。

【问题】阶乘计算

http://blog.163.com/zhoumhan_0351/blog/static/3995422720102165536445/

#include "iostream"

#include "string"

#pragma warning(disable:4267)

using namespace std;

const int N=1000;

bool Dsure(string str){

int m=str.length();

for(int i=0;i<m;i++){

if((str[i]>'9')||str[i]<'0')

  return false;

return true;

}

}//Dsure

void reverseIt(string& str){

    int m=str.length();

for(int i=0,j=m-1;i<=j;i++,j--){

char temp;

temp=str[i];

str[i]=str[j];

str[j]=temp;

}

}

void StrToInt(string str1,int (&a)[N])

{

for(unsigned int i=0;i<str1.size();i++)

a[i]=str1[i]-'0';

}

void Calcuate(string str1,string str2){

int m=0,n=0,count=0;

int a[N]={0},b[N]={0},Result[2*N]={0};

m=str1.length();//str1*str2,a*b

n=str2.length();

reverseIt(str1);

reverseIt(str2);

StrToInt(str1,a);

StrToInt(str2,b);

for(int i=0;i<n;i++)//乘数

for(int j=0;j<m;j++)//被乘数的位置

   {

   Result[i+j]+=b[i]*a[j];

   if(Result[i+j]>10){

   Result[i+j+1]+=Result[i+j]/10;

   Result[i+j]=Result[i+j]%10;

    }//if

   }//for

if(Result[m+n-1]!=0) count=m+n-1;

else count=m+n-2;

for(int i=count;i>=0;i--)

  {

  cout<<Result[i];

  }//for

cout<<endl;

}

int main()

{

string str1,str2;

while(1)

{

cout<<"Please input two integer:"<<endl;

cin>>str1>>str2;

if(!Dsure(str1)) 

   {

   cout<<"you must cin a int!!"<<endl;

   }

if(!Dsure(str2))

   {

   cout<<"you must cin a int!!"<<endl;

   }

cout<<"You have input is:"<<endl;

cout<<str1<<endl<<str2<<endl;

Calcuate(str1,str2);

}//while

}

52、求两个大整数的相乘问题 - EdwardLewis - 墨涵天地

原文地址:https://www.cnblogs.com/mydomain/p/1807704.html