ObjC:使用字母A-Z将数字转换为基数为26的字符串

时间:2016-11-02 05:30:15

标签: objective-c

我需要编写一个Objective-C函数来将十进制整数转换为base-26字符串,如下例所示。并且反过来。

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

2 个答案:

答案 0 :(得分:1)

似乎你想要创建一个基数为26的数字。所以它与基数为2的位数或基数为10的小数没有区别。但是你的模型缺少0

每个数字都有一个从右到左的电源基础。比特:

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

  1   0   1   1

现在多了一点力量和所有值的总和:

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

现在你已经掌握了基础,应该能够创建你的方法; - )

答案 1 :(得分:0)

我创建了一个recurcive功能来执行此操作

+ (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;

}