【HDU】1061 Rightmost Digit

本文介绍了一种通过寻找规律来解决求N^N最右边数字的问题的方法,并给出了一段C语言实现的代码。该问题适用于输入为1到10亿之间的正整数N,需要输出N^N的最右侧数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述
给定一个正整数N,你应该输出N ^ N的最右边的数字。

输入
输入包含多个测试用例。输入的第一行是单个整数T,它是测试用例的数量。T测试用例如下。
每个测试用例都包含一个正整数N(1 <= N <= 1,000,000,000)。

输出
对于每个测试用例,你应该输出N ^ N的最右边的数字。
示例输入
2 3 4
示例输出
7 6
提示
在第一种情况下,3 * 3 * 3 = 27,所以最右边的数字是7。 在第二种情况下,4 * 4 * 4 * 4 = 256,所以最右边的数字是6。

这道题我使用的是找规律的方法,在网上还看到了快速幂这种方法,有兴趣的可以自己查一下~

代码:

#include <stdio.h>

int main() {
    int a[10][4]={{0},{1},{6,2,4,8},{1,3,9,7},{6,4},{5},{6},{1,7,9,3},{6,8,4,2},{1,9}};    //0~9对应的情况
    int N,ans,temp,i;
    long long n;
    while (scanf("%d",&N)!=EOF) {
        for(i=0;i<N;i++)
        {
        scanf("%lld",&n);
        temp=n%10;
        if(temp==0||temp==1||temp==5||temp==6)
            ans=temp;
        else if(temp==4||temp==9)
            ans=a[temp][n%2];
        else
            ans=a[temp][n%4];
        printf("%d\n",ans);
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值