#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;
}
The aforementioned code works insofar as finding the reverse of a number, both negative and positive. If negative, say for example, -1234, the answer is supposed to read 4321-. I have no problems there. I am just learning Objective-C so I understand if this is a basic question and my code is very basic. The problem is I have some repeating code and I’m sure there is a better way to write this. I just wanted to know if someone could give me any insight.
Without critiquing the details of the algorithm (I might have done it differently, and I haven’t evaluated it for correctness/robustness) I can’t see anything that would be regarded as “inefficient”.
Necessarily you’re going to have to iterate through each digit, and you don’t appear to iterate more than necessary. The logic is all (save for the actual output) “scalar” (not-object) integer values, so no unnecessary object creation. At most you might be able to eliminate one or two of the tests in your
ifstatements, but there’s little efficiency gain there. And I can’t see how using any Cocoa classes might have made it simpler.