努力使我的Objective-c计划更有效率;初学者

时间:2011-11-05 21:49:28

标签: objective-c

#import <Foundation/Foundation.h>

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int number, right_digit;

    NSLog(@"Enter your number.");
    scanf("%i", &number);

    while (number != 0) {
        right_digit = number % 10;
        if (right_digit <0 && number <10 && number>-10) {
            right_digit = -right_digit;
            NSLog(@"%i- ", right_digit);
        }
        else if (right_digit<0) {
            right_digit = -right_digit;
            NSLog(@"%i", right_digit);
        }
        else {
        NSLog(@"%i", right_digit);
        }
        number /=10;
    }

    [pool drain];
    return 0;
}

上述代码的工作原理是找到数字的反向,包括负数和正数。如果是否定的,例如-1234,答案应该是4321-。我没有问题。我只是在学习Objective-C,所以我理解这是一个基本问题,而且我的代码非常基础。问题是我有一些重复的代码,我相信有更好的方法来写这个。我只是想知道是否有人可以给我任何见解。

2 个答案:

答案 0 :(得分:2)

我这样做:

NSInteger number = -12;
NSUInteger inverse = 0;

NSInteger sign = (number >= 0) ? 1 : -1;

number = number * sign;

while (number > 0)
{
    inverse = inverse * 10 + (number % 10);
    number = number / 10;
}

NSLog(@"%i%@", inverse, (sign == -1) ? @"-" : @"");

答案 1 :(得分:0)

如果不批评算法的细节(我可能会采用不同的方式,而且我没有对其进行正确性/稳健性评估),我看不出任何被视为“低效”的内容。

您必须遍历每个数字,并且您似乎没有超过必要的迭代次数。逻辑是全部(保存为实际输出)“标量”(非对象)整数值,因此没有不必要的对象创建。最多可以在if语句中消除一个或两个测试,但那里的效率几乎没有增加。我无法看到使用任何Cocoa类可能会使它变得更简单。