您的位置:首页 > 其它

hdu 1061

2015-06-21 22:31 211 查看
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、1、2、...、9各乘积的个位数保留下来,每次再输出即可。
ac代码
#include <iostream>

using namespace std;
int x[10][10];
int ux[10];
int NotIn(int a,int b);
int main()
{
    for(int i=0;i<10;i++)
        ux[i] = -1;
    for(int i=0;i<10;i++)
    {
        int use=i;
        int temp = use%10;
        int j=0;
        while(NotIn(temp,i))
        {
            ux[i]++;
            x[i][j++] = temp;
            use*=i;
            temp = use%10;
            //cout << x[i][j-1] <<" ";
        }
        //cout << endl;
    }
    int N;
    cin >> N;
    for(int i=0;i<N;i++)
    {
        long long ss;
        cin >> ss;
        int a = ss%10;
        int b = (ss)%(ux[a]+1);
        if(b>0)
            cout << x[a][b-1]<< endl;
        else
            cout << x[a][ux[a]]<<endl;
    }
    return 0;

}
int NotIn(int a,int b)
{
    for(int j=0;j<=ux[b];j++)
        if(a==x[b][j])
            return 0;
    return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: