大きな整数乗算(逓倍文字列)

タイトル:s1とs2の2つの文字列を考えるとは、(また、文字列で表される)積を返し、文字列は、それらが正の整数を表す整数演算の別のタイプに変換することができません。

解決策:手動でアナログ乗算。最初の文字列は、その後、生成物はビット(N1 + N2)ビットの数を超えない、n2は2ビットを有している、位置N1を想定しているので、最初の結果列0 RES番目(N1 + N2)に設定することができます。その後、各1、およびターンのS1、S2およびごとの合計を掛けます。製品のモジュロ10は、番号を配置する必要が1です。RES、RESのニーズと現在のビット加算数を生成するときに(例えば開始時間として0である)、したがって、この製品は10ビットと加算器10と分割に分割可能です。S2の各動作の終わりに、まだ実行するために結合されていない最後に、手動でプリペンドに1を運ぶために必要です。あなたは、製品サイクルが続く得ることができます。

クラス解決{
 パブリック文字列乗算( NUM1、ストリングNUM2){
         int型 L1 = num1.length()。
        INT L2 = num2.length()。
        もし(NUM1 == " 0 " || NUM2 == " 0 " のリターン " 0 " 文字列 RES(L1 + L2、' 0 ' );
        以下のためにint型 I = L1 - 1 ; i>を= 0 ; i--
        { 
            int型のステップ= 0 INT J = L2 - 1 ; J> = 0 ; j-- 
            { 
                int型 MUL =(NUM1 [I] - ' 0 ')*(NUM2 [J] - ' 0 ' )。
                INTの和=のRES [Iがj + 1 ] - ' 0 ' + +ステップMUL%10 
                RESは[Iは、J + 1 ] =合計%10 + ' 0 ' 
                ステップ =和/ 10 + MUL / 10 
            } 
            RES [I] + = ステップと 
        } 
        のためにint型 i = 0 ; I <L1 + L2; iは++ 
        { 
            場合(RES [I] =!' 0 ' 戻りres.substr(I)。
        } 
        リターン 0 
    } 
}。

 

おすすめ

転載: www.cnblogs.com/alderheart/p/10958615.html