所以我的朋友问我这个问题是面试练习: 使用Objective-C& Foundation Kit,编写一个采用单个数字int的方法,并向控制台注销该int被提升到100的精确结果。
最初我觉得这听起来很简单,但后来我才意识到,即使是一个数字加到100的数字也会很快接近100位,这会溢出。
所以我尝试通过创建NSArray w / NSNumbers(用于反射)来解决这个问题,其中数组中的每个对象都是最终结果编号中的一个位置。然后我执行乘法运算(包括运算中的因子分解),然后打印出通过连接数组中的对象形成的字符串。这是我的实现w /输入3:
NSNumber *firstNum = [NSNumber numberWithInteger:3];
NSMutableArray *numArray = [NSMutableArray arrayWithArray:@[firstNum]];
for( int i=0; i<99; i++)
{
int previousCarry = 0;
for( int j=0; j<[numArray count]; j++)
{
int newInt = [firstNum intValue] * [[numArray objectAtIndex:j] intValue] + previousCarry;
NSNumber *calculation = [NSNumber numberWithInteger:newInt];
previousCarry = [calculation intValue]/10;
NSNumber *newValue = [NSNumber numberWithInteger:(newInt % 10)];
[numArray replaceObjectAtIndex:j withObject:newValue];
}
if(previousCarry > 0)
{
[numArray addObject:[NSNumber numberWithInteger:previousCarry]];
}
}
NSArray* reversedArray = [[numArray reverseObjectEnumerator] allObjects];
NSString *finalNumber = [reversedArray componentsJoinedByString:@""];
NSLog(@"%@", finalNumber);
这不是教科书或其他任何问题,所以我没有提及双重检查我的工作。这个解决方案对你们有什么影响?即使复杂性为O(N),我也很担心它很天真,我不能帮助但感觉我没有使用一个独特的类型/类或方法Objective-C或Foundation Kit可能会产生更优化的解决方案 - 或者至少使算法更清晰,看起来更令人印象深刻