2016-11-02 6 views
-4

以下の例のように、10進整数を26進文字列に変換するObjective-C関数を記述する必要があります。また、それを逆にする。ObjC:数字のA〜Z文字を使用して10進数をベース26の文字列に変換する

0 = A 
1 = B 
2 = C 
... 
25 = Z 
26 = AA 
27 = AB 
28 = AC 

など

+1

を行うにはrecurcivefunctionを作成しているyiouはどうなるかウルしようとしたコード –

+0

を表示することができますか? = ABA –

+0

ABAは次の値ではなく、サンプル値です。 –

答えて

0

私はこの

+ (NSString *)alphaValueForNum:(int)num { 

    NSDictionary *charInfo = @{@"A": @0, 
           @"B": @1, 
           @"C": @2, 
           @"D": @3, 
           @"E": @4, 
           @"F": @5, 
           @"G": @6, 
           @"H": @7, 
           @"I": @8, 
           @"J": @9, 
           @"K": @10, 
           @"L": @11, 
           @"M": @12, 
           @"N": @13, 
           @"O": @14, 
           @"P": @15, 
           @"Q": @16, 
           @"R": @17, 
           @"S": @18, 
           @"T": @19, 
           @"U": @20, 
           @"V": @21, 
           @"W": @22, 
           @"X": @23, 
           @"Y": @24, 
           @"Z": @25}; 


    NSString *letter = [[charInfo allKeysForObject:[NSNumber numberWithInt:(num % 26)]] lastObject]; // ((num % 26)); 
    int remain = floor(num/26); 
    return (remain > 0) ? [NSString stringWithFormat:@"%@%@",[self alphaValueForNum:(remain-1)],letter] : letter; 

} 
+0

これは非常に非効率的な実装です。 1)再帰を使用する理由はありません。 2)辞書は必要ありません。 – rmaddy

+0

あなたの答えはまた質問の半分だけを解決します。これはベース26から10進に戻ろうとはしません。 – rmaddy

+0

@rmaddy:それでは、正しい機能を教えてください。私はそれを更新することができます。 –

1

あなたはベース10とベース2または小数点付きビット数にように、その変わらない26のベースとの数を作成したいと思われるしかし、あなたのモデルは、0を行方不明の欠けています

各桁には、右から左に向かって電源ベースがあります。ビットではその:

2^3 2^2 2^1 2^0 

    1 0 1 1 

は今mulitplyパワーと合計のすべての値を持つビット:

2^3=8x1=8 

2^2=4x0=0 

2^1=2x1=2 

2^0=1x1=1 

だから、十進数で1011の値は11.あなたのベースと同じ

(仮定ですA = 0、Z = 25)は

26^2 26^1 26^0 

    b z z 

26^2=676*b(1) =676 

26^1=26 *z(25)=650 

26^0=1 *z(25)=25 

bzzの値= 1351

今、あなたは基礎を持っているし、あなたの方法を作成することができるはずです;-)

関連する問題