zoukankan      html  css  js  c++  java
  • 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 - 墨涵天地

  • 相关阅读:
    Apache日志分析
    iptables日志探秘
    php与其他一些相关工具的安装步骤分享
    ERROR 1 (HY000): Can't create/write to file '/tmp/#sql_830_0.MYI' (Errcode: 13)
    一些可能需要的正则
    restful api的简单理解
    认识MySQL Replication
    如何处理缓存失效、缓存穿透、缓存并发等问题
    经典算法mark
    php常用的一些代码
  • 原文地址:https://www.cnblogs.com/mydomain/p/1807704.html
Copyright © 2011-2022 走看看