HDU 1061 Rightmost Digit

来源:互联网 发布:java获取时间毫秒数 编辑:程序博客网 时间:2024/06/10 17:57

Rightmost Digit

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


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
234
 

Sample Output
76
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
 

Recommend
We have carefully selected several similar problems for you:  1021 1008 1019 1071 1108 
 

方法一:
0~9都可以4为循环节
#include<iostream>#include<stdio.h>#include<string>#include<string.h>#include<cmath>using namespace std;int main(){long long n;int t,k,q;while(cin>>t){while(t--){cin>>n;k=n%10;q=(n-1)%4+1;     if(q==1)cout<<k<<endl;if(q==2)cout<<(k*k)%10<<endl;if(q==3)cout<<(k*k*k)%10<<endl;if(q==4)cout<<(k*k*k*k)%10<<endl;}}return 0;}

方法二:


#include<stdio.h>#include<string>#include<string.h>#include<cmath>#include<stack>using namespace std;int f(int a, int b, int c)        //快速幂取余a^b%c{    int res, t;    res = 1 % c;    t = a % c;    while (b)    {        if (b & 1)        {            res = res * t % c;        }        t = t * t % c;        b >>= 1;    }    return res;}int main(){    int t;    cin >> t;    while (t--)    {        int n;        cin >> n;        cout << f(n, n, 10) << endl;    }    return 0;}


0 0
原创粉丝点击