亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        C++基礎(chǔ)(大數(shù)乘法和多項式乘法)

        字號:

        看數(shù)據(jù)結(jié)構(gòu),鏈表的應(yīng)用,講到他可以處理多項式的乘法。
            實際上也可以拿相似的思想做大數(shù)相乘,只是把輸入源從鏈表變?yōu)閿?shù)組即可。
            基本原理:
            1,把兩個數(shù)字a和b轉(zhuǎn)換成字符,放到字符數(shù)組里;或者把數(shù)字的每一位隔離開分別放到數(shù)組里作為一位,這樣更方便乘法處理。這樣做的根本好處是:相乘的時候不會造成溢出。
            2,結(jié)果數(shù)組的長度,應(yīng)該是a的長度+b的長度+1,所以定義一個這樣的數(shù)組;
            3,過程很簡單了:a中的第i位乘以b中的第j位,保存在c中的第i+j位;
            4,后期處理。注意,經(jīng)過第三步處理過的c中的結(jié)果,每一位都可能向高位進(jìn)位;比如說,c[8]=24。這時候就要從低位開始把進(jìn)位部分向高位加,一次循環(huán)即可:
            for(i=0;i    for(j=0;j    *(c+i+j)+=*(a+i) * *(b+j);
            // 處理進(jìn)位
            for(i=0;i    {
            *(c+i+1)+=*(c+i)/10; //進(jìn)位累加到高位
            *(c+i)=*(c+i)%10; //該位的最后結(jié)果
            }
            這時候就計算完畢了。
            但是,第3行和第8、9行實際上是可以放到一起的??荚嚧筇崾局灰我庖淮斡嬎銓?dǎo)致了c[k]的值>10,那么立刻進(jìn)行進(jìn)位處理。于是提高之后的版本是:
            for(i=0;i    for(j=0;j    {
            c[i+j]+=a[i]*b[j];
            c[i+j+1]+=c[i+j]/10;
            c[i+j]%=10;
            }
            關(guān)于進(jìn)位這個事情,多項式就沒有這個問題,因為每一項的系數(shù)可以>10。不過他也有他自己的處理:如果系數(shù)為0的話,就把該項刪除