zoukankan      html  css  js  c++  java
  • 思维(数学)

    求n的n此方的最后一位:

    #include <cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int t;
        long long int a,b,ans,n;
        scanf("%d",&t);
        while(t--)
        {
            ans=1;
            scanf("%lld",&a);
            b=a;
            n=a;
            while(n)
            {
                if(n&1)
                {
                    ans=(ans%10*a%10);
                }
                a=a%10*a%10;
                n>>=1;
            }
            printf("%lld
    ",ans%10);
        }
        return 0;
    }

    求n的n此方的最高位: 

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int main()
    {
        long long int t,a,ans,b,c,ge;
        scanf("%lld",&t);
        while(t--)
        {
            ge=0;
            scanf("%lld",&a);
            double p=a*log10(a*1.0);
            p-=(long long int)p;
            int pp=pow(10.0,p);
            printf("%d
    ",pp);
        }
        return 0;
    }

    求n的介乘的有多少个零:

    思路:

    0的来源是5×2,1--n中的数如果能被2整除或被5整除 ,就可以看作2或5,而2是每两个就会有一个2,5则是每5个才有一个5,所以2的个数比5的多,求零的个数只需求5的个数即可。

     所以看 1遍历到n ,每个数能分成的5的个数,因为每五个才有一个五,所以先用n/5,1--n中就知道是有多少能被5整除的,而n/25就是知道有多少能被25整除的,而在n/25中五的个数为n/25 ×2,在第一遍中 都除了5所以而且都加了一遍,所以第二边中只需要除5在加一遍,以此类推当,代码如下:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long int ll;
    int main()
    {
        ll n,a,ans=0;
        scanf("%lld",&n);
        while(n--)
        {
            scanf("%lld",&a);
            ans=0;
            while(a)
            {
                ans+=a/5;
                a/=5;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }

     求n的介乘倒数第一位不为零的数是多少:

    思路:

    对于每一个能把五整除的都除5(即:把五都弄没,这样就不会有零了),记录有5的个数,对应的,去掉一样个数的二,这样最后%10,就是最终答案。

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int n,a[5000],cnt=0,ans=1,i;
        scanf("%d",&n);
        for(i=n; i>=1; i--)
        {
            a[i]=i;
            while(a[i]%5==0)
            {
                a[i]/=5;
                cnt++;
            }
        }
        for(i=n; i>=1; i--)
        {
            if(cnt==0)
                break;
            while(a[i]%2==0&&cnt>0)
            {
                a[i]/=2;
                cnt--;
            }
        }
        for(i=1; i<=n; i++)
        {
            ans*=a[i];
            ans%=10;
        }
        printf("%d",ans);
    }
  • 相关阅读:
    ubuntu16.04安装配置nagios
    springboot+mybatis+springmvc整合实例
    网站性能优化小结和spring整合redis
    mybatis的批量更新实例
    安装webpack和webpack打包(此文转自Henery)
    微信扫描二维码下载软件
    ubuntu16.04设置tomcat自启动
    无意中在sql日志中发现如下内容,
    实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)
    (C#)WinForm窗体间传值
  • 原文地址:https://www.cnblogs.com/bhd123/p/9588083.html
Copyright © 2011-2022 走看看