Objective c ObjC:使用字母a-Z作为数字,将十进制数转换为以26为基数的字符串

Objective c ObjC:使用字母a-Z作为数字,将十进制数转换为以26为基数的字符串,objective-c,Objective C,我需要编写一个Objective-C函数,将十进制整数转换为base-26字符串,如下例所示。同时也将其反转 0 = A 1 = B 2 = C ... 25 = Z 26 = AA 27 = AB 28 = AC 等等。似乎您想要创建一个以26为基数的数字。所以它和以2为基数的位数或以10为基数的小数没有什么不同。但是您的模型缺少缺少0 每个数字都有一个从右到左的幂基。以比特为单位: 2^3 2^2 2^1 2^0 1 0 1 1 现在,将该位乘以幂并求和所有值: 2^3

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

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

等等。

似乎您想要创建一个以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)

所以bzz的值=1351


现在您已经具备了基础知识,应该能够创建您的方法;-)

我创建了一个递归函数来执行此操作

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

}

你能告诉我会是什么吗ABA不是下一个值,它是一个示例值。如果没有解决方案,不要无缘无故地使用否定词。这是一个非常低效的实现。1) 没有理由使用递归。2) 不需要字典。你的答案也只解决了问题的一半。这并没有试图从基数-26返回到小数。@rmaddy:好的,那么您能给我正确的函数吗。我可以更新它。
+ (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;

}