杭电 1061

来源:互联网 发布:实时数据库产品有哪些 编辑:程序博客网 时间:2024/05/22 05:28

Rightmost Digit

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

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.

 

 

分析:

读完题首先想到的是大数,但是这大数貌似也太大了,就算能放下,这么多大数乘法铁定超时,考虑优化,写个小程序打表观察能发现这样一个规律,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;

}

0 0