Objective c ObjC:使用字母a-Z作为数字,将十进制数转换为以26为基数的字符串
我需要编写一个Objective-C函数,将十进制整数转换为base-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
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;
}