zoukankan      html  css  js  c++  java
  • 杭电 1061 Rightmost Digit计算N^N次方的最后一位

    Problem Description
    Given a positive integer N, you should output the most right digit of N^N.
    
    Input
    The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
    Each test case contains a single positive integer N(1<=N<=1,000,000,000).
    
    Output
    For each test case, you should output the rightmost digit of N^N.
    
    Sample Input
    2
    3
    4
    Sample Output
    7
    6
    Hint
    In the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7.
    In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.
    

      

    我写的错误???错误的原因是超时,

    //rightmost digit
    #include<iostream>
    using namespace std;
    int main()
    {
        int n,tmp,m;
        cin>>n;
            while(n--){
            cin>>m;
            tmp=1;
            m%=10;
    //        cout<<"m-==="<<m<<endl;
            for(int i=0;i<m;i++)
            tmp=tmp*m%10;
            cout<<tmp<<endl;
            }
        }
    View Code

    正确代码:

    #include<iostream>
    using namespace std;
    int main()
    {
        int a,ans,n=0;
        double dval = 0;
        int count=0;
        cin>>n;
        while(n--)
        {
            cin>>a;
            ans=1;
            count=a;
            a = a%10;
            while (count)
            {
                if (count&1==1)
                    ans=(ans*a)%10;
                a=(a*a)%10;
                count>>=1;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    View Code

     解法二:

    读完题首先想到的是大数,但是这大数貌似也太大了,就算能放下,这么多大数乘法铁定超时,考虑优化,写个小程序打表观察能发现这样一个规律,n的次方是有周期性的,且周期为4,这样就好办了,对于给定的N,求N*N的个位数,只需算N的个位数的N%4次方,然后对10取余就是所要求的结果了

    #include<iostream>
    #include<math.h>
    using namespace std;
    int main()
    {
    int t;
    cin >> t;
    while (t--)
    {
    int n, m;
    cin >> n;
    m = n % 4;
    if (m == 0)
    m = 4;
    n = n % 10;
    cout <<int( pow(n, m)) % 10 << endl;
    }
    return 0;
    }
    View Code

    PS:

    //利用二进制输出 输入的数字 
    #include<iostream>
    using namespace std;
    int main()
    {
        int test,t,n,ans;
        while(cin>>n){
            
        test=n;
        t=1;
        ans=0;
        while(test){
            if(test&1==1) ans+=t;
            t*=2;
            test>>=1;
        }
        cout<<ans<<endl;
    }
    } 
    View Code
  • 相关阅读:
    hostapd AP模式 2.4G/5G
    hostapd挂载不上驱动bcmdhd.ko以及SDIO读写错误
    C++入门 -- const用法(转载)
    C++ 入门 -- size_t
    C++ 入门 -- 全局变量的使用(转载)
    C++ 入门 -- const用法小结
    大数据揭示的10个常见JAVA编程错误
    jsfiddle
    ionic
    React native android 最常见的10个问题
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10434470.html
Copyright © 2011-2022 走看看