實現兩個長整型數相乘
阿新 • • 發佈:2018-12-28
#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; }