HDU-1061-Rightmost Digit

来源:互联网 发布:虚拟屏幕软件 编辑:程序博客网 时间:2024/06/06 22:10

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.

这道题主要是要求N^N的结果的最后一位,我在这里用的是快速幂算法,不会这算法的可以点这个链接http://blog.csdn.net/qq_38712932/article/details/76218952

这里需要注意的就是在快速幂中需要对这个形参a对10取余,后面的每部也需要注意取余

#include <cstdio>int ks(int a,int b){    int ans=1;    a%=10;    while(b)    {        if(b&1)            ans=ans*a%10;        a=a*a%10;        b>>=1;    }    return ans;}int main(){    int m;    scanf("%d",&m);    while(m --)    {        int n;        scanf("%d",&n);        printf("%d\n",ks(n,n));    }    return 0;}

我看别人写的题解后,发现有位大佬写的算法贼六

#include <cstdio>int main(){    int n,sum=1,f,m;    scanf("%d",&m);    while(m --)    {        sum=1;        scanf("%d",&n);        f=n%10;        if(n%4==0)            n=4;        else            n=n%4;        for(int a = 0; a < n; a ++)            sum=sum*f%10;        printf("%d\n",sum);    }    return 0;}

这个代码的意思是N^N次方从1到N和N相乘你测试时会发现最后一位数有一个周期为4,但是4,5等一系列的数的周期是2,5的周期是1,那么可以将其看作是周期是4的数。

原创粉丝点击