2012-01-02 9 views
1

私は非常に長い整数を持っています。整数は、符号なし文字の配列で表されます。整数n(配列として表される)を基底nで整数に変換するアルゴリズム

例:ベース10と整数1234 [4,3,2,1]、[2,2,3,2](ベース8)のようにアレイ状に表され、[2,13 、4](基数16)

ここで、基数nの整数を基数mの別の整数に変換したいとします。答えを求める私の質問には、Wallar's algorithm、最初はhereから来ました。

from math import * 
def baseExpansion(n,c,b): 
    j = 0 
    base10 = sum([pow(c,len(n)-k-1)*n[k] for k in range(0,len(n))]) 
    while floor(base10/pow(b,j)) != 0: j = j+1 
    return [floor(base10/pow(b,j-p)) % b for p in range(1,j+1)] 

最初は私の答えだと思っていましたが、残念ながらそれはありません。私が持っている問題は、アルゴリズムが合計を計算することです。私の場合、変数base10は32ビットの符号なし整数型であるため、これは問題です。したがって、配列として表現された整数に10桁以上の数字がある場合、それ以上は変換できません。誰にでも解決策がありますか?

答えて

1

ここには、あなたが試みていることを行うための学校図書アルゴリズムがあります。あなたはゼロの表現で始まり、それを実行中の合計と呼んでいます。次に、変換する数値の各桁について、最上位から始めて最下位に向かって、1)実行中の合計にソース番号の基数を掛け、2)累計に桁を加算する。今では必要なのは、乗算と加算を行うアルゴリズムです(実際には両方を同時に実行できます)。 1)現在の桁を変数に設定し、それをキャリーと呼びます。2)新しい番号の各桁について、最下位から始めて最も重要なものに移動します。新しい数字の現在の桁と出力ベースとキャリーとの乗算の現在の桁、2b)現在の桁を出力ベースのmodに設定する、2c)桁上げキャリーを出力ベースで割ったキャリーを設定する。そして、それはそれを行う必要があります。あなたがここで何かしようとしていることの実装があります:http://www.cis.ksu.edu/~howell/calculator/comparison.html

関連する問題