2016-11-02 59 views

回答

0

我創建了一個recurcivefunction做到這一點

+ (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回到十進制。 – rmaddy

+0

@rmaddy:好的,請你給我正確的功能。我可以更新它。 –

1

似乎要創建的26.所以其位號沒有什麼不同與基地2或小數的基地10基數的數字,但缺少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

現在你有基礎,應該能夠創建你的方法;-)

相關問題