• 6-10 阶乘计算升级版(20 分)


    6-10

    6-10 阶乘计算升级版(20 分)

    本题要求实现一个打印非负整数阶乘的函数。

    函数接口定义:

    void Print_Factorial ( const int N );
    

    其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

    裁判测试程序样例:

    #include <stdio.h>
    
    void Print_Factorial ( const int N );
    
    int main()
    {
        int N;
    	
        scanf("%d", &N);
        Print_Factorial(N);
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    15
    

    输出样例:

    1307674368000
    

    AC代码

    void Print_Factorial ( const int N ){
    	long long s=1;
    	if (N==0)
    	printf("%lld",1);//与%d,变量值1有区别?? 
    	if(N>0){
    	/*	for(int i=1;i<=N;i++){
    			s*=i;	
    	}
    	printf("%lld",s);//坑啊,好在我已经过了30天了 ,1000的阶乘,果然数据大了就不一样啊*/ 
    		
            int result[10000]={0};//10000个0 
            int result_size=1;//实时更新result的实际位数
            int carryBit = 0; //进位的值	
            result[0]=1;//初始结果为1	
            for (int out = 2; out <= N; out++) {  
                for (int in = 0; in < result_size; in++) {  
                    int temp = result[in] * out + carryBit;//  
                    result[in]=temp % 10;  
                    carryBit = temp / 10;  
                }  
                while (carryBit != 0) { //引入新进结果位 
                    result[result_size]=carryBit % 10;  
                    result_size++;
                    carryBit = carryBit / 10;  
                    // carryBit =0;循环之深意啊 
                }  
            }
    	  	//cout<<value<<"的阶乘结果为:"<<endl;
    	    for(int i=result_size-1;i>=0;i--)  
    	    {  
    	        //cout<<result[i];
    	        printf("%d", result[i]);
    	    }  
    	}
    	if(N<0)
    	printf("Invalid input"); 
    }
    

    相关思考

    主要问题在于1000的阶乘数字非常大。

    代码来源为转载

    (华为面试一)1000的阶乘如何实现?_高明军_新浪博客 http://blog.sina.com.cn/s/blog_4baa2c250100ijpn.html

  • 相关阅读:
    Cookie&Session会话跟踪技术
    JS前端数据多条件筛选(商品搜索)
    vue数据传递的特殊实现技巧
    Vue2.x directive自定义指令
    vue 自定义组件使用v-model
    Array.prototype.slice.call(arguments)探究
    webstorm快捷键汇总
    表单添加缩略图及截图js代码
    CSS水平垂直居中的几种方法
    下载页面判断客户端
  • 原文地址:https://www.cnblogs.com/lingr7/p/9276002.html
Copyright © 2020-2023  润新知