我正在尝试使阶乘方法如下

-(void)getFactorial{
    NSString *numStr = [NSString stringWithFormat:@"%@", _maxTF.text];
    max = strtoull([numStr UTF8String], NULL, 0);
    for (unsigned long i = 1; i< max ; i++) {
        unsigned long factorial = [self factorial:i];
       if(factorial <= max){
          NSLog(@"%lu (%lu!  =  %lu)",i ,i ,factorial);
       }else{
          break;
       }
    }
}

-(unsigned long) factorial:(unsigned long)n
{
    if (n==0) {
        return 1;//TODO make it empty
    }
    else
    {
        return n*[self factorial:n-1];
    }
}


而且很简单,也可以正常工作..直到我尝试输入像(18446744073709551615)
当i = 20时,它一定会停止,但是21的阶乘实际上小于20的阶乘,因此一直持续到零。

我不知道问题到底出在哪里。

最佳答案

阶乘大于usigned long所允许的范围,从而导致溢出(再次从0开始),使其看起来较小。

关于ios - iOS:无符号长,大阶乘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32107004/

10-11 21:28