HDU Rightmost Digit

来源:互联网 发布:mac装好windows没wifi 编辑:程序博客网 时间:2024/06/06 06:23

题目描述:

给出一个n,求n^n结果最右边的数字是什么?


问题分析:

最右边的数字,是n最右边的数字进行乘法运算得到的,所以只要计算最右边数字的幂方就行了。

当n很大的时候,不可能将最右边数字相乘结果算出来,只能通过一定的规律来处理。


最右边的数字假设为m,则m的范围为1、 2 、 3 、... 、 8 、9 、0;

m = 1;无论多少都是1

m = 2; 则出现 2   4   8   6   2

m = 3; 则出现3   9   7   1   3

m = 4; 则出现4   6   4

m = 5 、6 ,则出现 5   、  6

m = 7; 则出现7   9   3   1   7

m = 8; 则出现8   4   2   6   8

m = 9; 则出现9   1   9

m = 0;为 0;


可以得出规律,一个数字的幂方,是在周期为4的循环中。所以只要判断最右边数字的幂方和4的余数就可以了。


#include <stdio.h>
#include <math.h>
/*
1 1
2 4 8 6 2
3 9 7 1 3
4 6 4
5 5
6 6
7 9 3 1 7
8 4 2 6 8
9 1 9
0 0
*/
int main()
{
    unsigned long int n;
    int i, m;

    scanf("%d", &i);
    while(i > 0)
    {
        scanf("%ld", &n);

        m = n % 10;
        n = n % 4;

        if (n == 0) n = 4;
        printf("%d\n", pow(m, n));

        --i;
    }
    return 0;
}




0 0