美文网首页
使用Objective-C实现13进制转换为10进制数

使用Objective-C实现13进制转换为10进制数

作者: TianKengZhe | 来源:发表于2017-12-16 17:27 被阅读0次

    int main(int argc, const char * argv[]) {

    @autoreleasepool {

    //定义一个数组,保存对应的13进制数,0-12,共13个字母,对应10进制的数字

    NSArray *testArray = @[@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m"];

    NSString *num = @"abc";//"abc"为给出的13进制数

    NSInteger sum = 0; //sum保存计算的值

    NSMutableArray *newNumbers = [NSMutableArray array]; //定义一个可变数组,用来保存从"abc"中分解出来的字符"a","b","c".

    for (NSInteger i = num.length - 1; i >= 0; i--) { //反向循环取"abc"对应位置的字符,在字符串"abc"中,如果正向循环取值的话,a对应的是0位,b代表1位,c代表2位,正确的对应应该是a代表第三位,b代表第二位,c代表第一位,在转换为对应的10进制数后加入新的数组,需要反向排序一次,不然计算13进制计算过程会变成a * 13º + b * 13¹ + c * 13²,这是不对的,正确算法是c * 13º + b * 13¹ + a * 13²,有点啰嗦,核心就是:主要的做法就是分解字符串加入数组,并且让其对应的数组下标跟13的指数相同

    unichar charater = [num characterAtIndex:i];

    NSString *subString = [NSString stringWithFormat:@"%c",charater]; //unichar转换为NSString

    if (![testArray containsObject:subString]) { //如果13进制原始数组不包含需要转换的字符串中的字符,如:"x","y","t"之类的,那么是不合法的13进制数,直接退出循环。

    NSLog(@"There's some illegal chracters : %@",subString);

    break;

    }

    NSUInteger index = [testArray indexOfObject:subString]; //取出"a","b","c"在原始数组中的下标,即对应的10进制数,"a"代表0,"b"代表1,"c"代表2

    [newNumbers addObject:[NSNumber numberWithInteger:index]];

    }

    for (int i = 0 ; i < newNumbers.count; i++) {// 循环数组,对应位置做13的指数运算,加起来的值就是对应的10进制的值,例如:101这个数字在10进制中是1 * 10º + 0 * 10¹ + 1 * 10² = 101,在2进制中是1 * 2º + 0 * 2¹ + 1 * 2² = 5.

    sum += pow(13, i) * [newNumbers[i] integerValue];

    }

    NSLog(@"%@,%ld",newNumbers,sum);

    }

    return 0;

    }

    相关文章

      网友评论

          本文标题:使用Objective-C实现13进制转换为10进制数

          本文链接:https://www.haomeiwen.com/subject/cdaswxtx.html