美文网首页
iOS开发计算100的阶乘

iOS开发计算100的阶乘

作者: 落叶兮兮 | 来源:发表于2020-12-17 14:51 被阅读0次

最近看到一些大公司的面试题:计算100的阶乘
开始考虑怎么实现

最初的想法是使用do while循环实现,相应的代码如下:

    int i = 1;
   NSInteger result = 1;
    do {
        result = result * i;
        NSLog(@"当前的result为%ld",(long)result);
        NSLog(@"当前的i的值为%d",i);
        i++;
   } while ( i <= 100);

结果运行之后,result的结果为0
通过调试发现运行过程没错,出现这种问题是因为result数值太大超过了NSInteger的范围
也就是所谓的溢出

后面尝试更改其他的数据类型,oc中长数据最大的就是long long吧,结果更换成longlong后,还是溢出

通过查找网上其他的方法,发现确实有办法显示出来,比如使用double类型等

但是这道题只是考思路,并没有一定要出数值

在网上看到两种方法,一种是类似我上面的循环(我没有考虑到0的阶乘的情况),另一种是递归实现

在这里记录一下

循环实现100的阶乘计算

long long dofactorial(int min, int max) {
    if (min > max) {
        return 0;
    }
    if (min == 0) {
        if (max == 0) {
            //0的阶乘是1
            return 1;
        } else {
            min = 1;
        }
    }
    long long result = 1;
    for (int i = min; i < max; i++) {
        result *= i;
        
        NSLog(@"result = %lld",result);
        if (result > INT_MAX) {
            return  -1;
        }
    }
    return result;
}

使用递归实现

- (long long)recursion1:(NSInteger)n {
    if (n == 0) {
        return 1;
    }
    return n * [self recursion1:(n-1)];//递归公式
}

相关文章

网友评论

      本文标题:iOS开发计算100的阶乘

      本文链接:https://www.haomeiwen.com/subject/ditzgktx.html