实现两个长整型数相乘

#include<iostream>
#include<cstring>
using namespace std;

int main(){
    int strA[4000],strB[4000],strC[4000]={0}; 
    int lenA=0,lenB=0,lenC=0,i,j,t=0,flagA=1,flagB=1;
    char str[40000];

    //输入第一个数 
    cout<<"输入第一个数,回车结束输入:"; 
    gets(str);
    for(i=0;i<strlen(str);i++){
        if(str[i]=='-'){
            flagA=-1;
            continue;
        }
        strA[t++]=str[i]-'0';
    }
    lenA=t;
    //输入第二个数 
    cout<<"输入第二个数,回车结束输入:"; 
    gets(str);
    for(i=0,t=0;i<strlen(str);i++){
        if(str[i]=='-'){
            flagB=-1;
            continue;
        }
        strB[t++]=str[i]-'0';
    }
    lenB=t;
    //两数相乘 
    for(int i=lenA-1,p=0;i>=0;i--,p++){
        for(int j=lenB-1,k=0;j>=0;j--,k++){
            strC[k+p]+=strA[i]*strB[j];
            lenC=k+p+1;
        }
    }
    //进位 
    int newLen=0;
    for(int i=0;i<lenC;i++){
        if(strC[i]>=10){
            int n=strC[i];
            strC[i]=n%10;
            n=n/10;
            newLen=i;
            int t=i+1;
            while(n){
                strC[t]+=n%10;
                n=n/10;
                newLen=t;
                t++;
            } 
        }
        if(newLen<i) newLen=i;
    }
    cout<<"乘积:"; 
    if(strC[newLen]==0){
        cout<<"0"<<endl;
        return 0;
    }
    //判断符号 
    if(flagA*flagB==-1) cout<<"-";
    //输出乘积 
    for(int i=newLen;i>=0;i--){ 
        cout<<strC[i];
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/QGhurt/article/details/85321785
今日推荐