试图让我的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,所以我明白这是一个基本问题,我的代码是非常基础的。问题是我有一些重复的代码,我相信有更好的方式来写这个。我只是想知道是否有人能给我任何见解。试图让我的Objective-C程序更高效;初学者
(我可能会做不同的是,我还没有评估它的正确性/鲁棒性),我不能看到任何被认为是“低效率”的东西。
必须你必须遍历每个数字,而且你看起来并没有超出必要的迭代次数。逻辑是(除了实际输出)“标量”(非对象)整数值,所以没有不必要的对象创建。您最多可以消除if
报表中的一个或两个测试,但效率增益不大。而且我看不出如何使用任何Cocoa类可能会简化它。
谢谢。它确实有效。我只是想知道如果没有重复代码来解决问题,可能会有更好的方法。 –
杰夫的方法肯定有点“更紧密”,但有可能(现实生活中)是一次或多次显示一个数字的数字(就像你一样)而不是一次显示(如杰夫所做的那样)。而且,尽管他的代码更小/更紧密,但在大多数情况下效率的差异可以忽略不计。基本上你想避免大的低效率(例如,大的N平方算法或堆的大集合),而不用担心是否可以在2-3行代码中执行简单的操作。 –
我愿意做这样说:没有批评的算法的细节
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) ? @"-" : @"");
看起来像[代码评论](http://codereview.stackexchange.com/)的问题。如果您喜欢,您可以标记您的问题并请主持人将其迁移到那里。请记住,不建议交叉发布。 – 2011-11-05 22:16:46