HDU Rightmost Digit

题目描述:

给出一个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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值