#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,所以我理解这是一个基本问题,而且我的代码非常基础。问题是我有一些重复的代码,我相信有更好的方法来写这个。我只是想知道是否有人可以给我任何见解。
答案 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类可能会使它变得更简单。