如何打印出一个提升到100次幂的整数(处理溢出)

时间:2015-05-01 06:51:13

标签: objective-c algorithm cocoa

所以我的朋友问我这个问题是面试练习: 使用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可能会产生更优化的解决方案 - 或者至少使算法更清晰,看起来更令人印象深刻

0 个答案:

没有答案