程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> HDU 1061 Rightmost Digit

HDU 1061 Rightmost Digit

編輯:關於C++


Rightmost Digit

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 36563 Accepted Submission(s): 13871



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.
 

Author Ignatius.L 求N的N次方的最後一位數。 快速冪。。 假如8^4。可以看成64^2 。。 這樣運算次數減少了三次。 假如8^5 我們可以先將一個8存起來,變成8^4。。 然後一直反復操作。。 代碼
#include 
#include 
#include 
#include
#include 
#include 
#include 
#include
#include 
#include 
#include 
using namespace std;
#define inf 0x6f6f6f6f
#define mod 10
long long wei(long long k)
{
    long long n=k;
    long long r=1;
    while(k)
    {
        if(k&1)  //k次冪為奇數,可以存起一個數。
          r=r*n%mod;
        n=n*n%mod;
        k>>=1;   //位運算,加快速度。
    }
    return r;
}
int main()
{
    long long k;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        cin>>k;
        long long ans=wei(k);
        cout<
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved