zoukankan      html  css  js  c++  java
  • 南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。

    N!

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    阶乘(Factorial)是一个很有意思的函数,但是不少人都比较怕它。现在这里有一个问题,给定一个N(0<0<1000000000),求N!的二进制表示最低位的1的位置(从右向左数)。

     
    输入
    本题有多组测试数据,每组数据一个正整数N(0<0<1000000000),以EOF结束
    输出
    求N!的二进制表示最低位的1的位置(从右向左数)。一组数据占一行。
    样例输入
    1
    2
    3
    4
    样例输出
    1
    2
    2
    4
    提示
    2! = (2)10 = (10)2,则第一个1是第二位
    3! = (6)10 = (110)2,则第一个1是第二位
    4! = (24)10 = (11000)2,则第一个1是第四位
    来源
    NOJ
    怎么证明???
     1 #include<stdio.h>
     2 
     3 int main()
     4 {
     5     int n,s;
     6     while(scanf("%d",&n)>0)
     7     {
     8         s=1;
     9         while(n)
    10         {
    11             s=s+(n>>=1);
    12         }
    13         printf("%d
    ",s);
    14     }
    15     return 0;
    16 }

    PID274 / 最末非0位

    题目描述

    小笨是个贪玩的小孩,一天到晚都要玩游戏。(这样可不行哦>_<)。有一天晚上,他在电脑上找到了一个游戏,很简单。就是电脑显示一个数n,要你数出n!的最末非0位是什么数。如n=5,n!=120。最末非0位上的数即为2;小笨跟他名字一样有一点笨,总是算不出正确答案,只好找到了你。请你帮帮忙哦^()^.

    输入格式

    仅一行,n.(n<=2000000)

    输出格式

    n的最末非0位

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<cstring>
     4 #include<cstdlib>
     5 using namespace std;
     6 typedef long long LL;
     7 const LL INF = 1000000000000;
     8 
     9 int main()
    10 {
    11     LL n,i,sum;
    12     while(scanf("%lld",&n)>0)
    13     {
    14         sum=1;
    15         for(i=1;i<=n;i++)
    16         {
    17             sum=sum*i;
    18             sum=sum%INF;
    19             while(sum%10==0)
    20             {
    21                 sum=sum/10;
    22             }
    23         }
    24         printf("%lld
    ",sum%10);
    25     }
    26     return 0;
    27 }
  • 相关阅读:
    vue 遇到的问题
    vue webpack添加jQuery
    如何将在线电子书保存为pdf格式
    swagger 支持动态host和basePath
    本地chrome调试服务器node
    滚动页面一定距离后固定导航条
    发布-订阅模式
    react生命周期
    redux
    原型及继承
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3696073.html
Copyright © 2011-2022 走看看