高精度乘法


【題目描述】
輸入兩個高精度正整數M和N(M和N均小於100位)。求這兩個高精度數的積。

【輸入】
輸入兩個高精度正整數M和N。

【輸出】
求這兩個高精度數的積。

【輸入樣例】
36
3
【輸出樣例】
108
#include<iostream>  
#include<cstring>  
#include<string>  
using namespace std;  
char s1[256],s2[256];
int a[256],b[256],c[256];
int main()
{
    cin>>s1;
    cin>>s2;
    int lena,lenb,i,j,lenc;
    lena=strlen(s1);
    lenb=strlen(s2);
    for(i=0;i<=lena;i++)     //將字符串轉換為數字逆序存入數組中
        a[lena-i]=s1[i]-'0';
    for(i=0;i<=lenb;i++)
        b[lenb-i]=s2[i]-'0';
        for(i=1;i<=lenb;i++)  //外層循環當做乘數;雙層循環跑起來,不僅次次進位,還把乘數相加起來進位(相當於列豎式數字相加)
        {
            int x=0;       //用來進位的,外循環結束一遍后進位x要歸零處理
        for(j=1;j<=lena;j++)  //內存循環跑乘法,也要注意進位
        {
            c[i+j-1]=c[i+j-1]+x+a[j]*b[i];  //此位=此位加上進的位x+ab乘積
            x=c[i+j-1]/10;         //進前位,所以除以10
            c[i+j-1]=c[i+j-1]%10;  //對10取余,留下本位的
        }
        c[i+lena]=x;   //內層循環跑完(b乘完了a的各個位),x應進到下一位
    }
        lenc=lena+lenb;
         while((c[lenc]==0)&&(lenc>1))  //去掉前導零
                 lenc--;  
        for(i=lenc;i>=1;i--)   //逆序輸出c數組
            cout<<c[i];  
        cout<<endl;  
    return 0;  
}

大數用字符數組輸入,將各個數位轉化為數值存入數組中;雙層循環中的乘法是反過來乘的;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM