杭电ACM1061Rightmost Digit

 题目是这样的

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.
由于有时间限制和运算范围的限制,显然不能直接计算,那么就是要找规律。
我们知道,这最后一个数只是最后个位数反复相乘的结果,而这结果只在0与9之间,我们只要计算出它的循环
长度即可。代码如下:

#include <iostream> using namespace std; int main() { int T; cin>>T; int i=0,N; for (i=0;i<T;i++) { cin>>N; int M=N%10,P=1,MM,len=0; int T[10]={10}; for(int j=0;j<N;j++) { MM=(P*M)%10; for(int k=0;k<=len;k++) { if(T[k]==MM) goto MARK; } T[len++]=MM; P=MM; } MARK: cout<<T[(N+len-1)%len]<<endl; len=0; } return 0; }

你可能感兴趣的:(Integer,input,each,output)