• 单身狗进化——求n!的位数




    题目:



    分析:

    这道题目要求的是n!的位数,显然一种思路是先求出n!的值,假定为res,然后再计算res的位数,这种方法在n比较小时是可以的,如果res为int型,一旦n>16,res就会超出int范围,如果为double型,当n>170时也会出错,而此题的n最大可以为25000,显然没办法先求出res。当然,如果通过数组去模拟,也是可以的,但是对于此题来说太过麻烦,所以换种思路来做。如果是要求n!的值,那就只能通过数组去模拟了,但是我们现在只要求n!的位数即可,那么就可以边算阶乘,边算位数。我们都知道,要计算一个数的位数,只要把这个数一直除以10,用一个计数器就可以了。这里也一样,可以把每一次res都除以10,直到它比10小为止,每除一次,就把计数器加一。由于res的最后几位小数在double范围内并不会对位数造成影响,所以此法可行。



    代码:

    #include<iostream>
    using namespace std; 
    
    int main()
    {
        int n,i;
        double res=1;
        int count=1;
    
        cin>>n;
    
        for(i=2;i<=n;i++)
        {
    	    res*=i;                   //计算阶乘
    	
    	    while(res>=10)            //计算位数
    	    {
    		    res/=10;
    		    count++;
    	    }
        }
    
        cout<<count<<endl;
    
        return 0;
    }
    


  • 相关阅读:
    solr总结
    jeesite
    Freemarker模板的使用简介
    Sd
    Sd
    Sd
    Standard Java集合类问题待整理
    Standard
    Linux并发服务器设计
    Java 生产者消费者 & 例题
  • 原文地址:https://www.cnblogs.com/jiuweilinghu/p/5929408.html
Copyright © 2020-2023  润新知