51Nod Problem 1004 n^n的末位数字(规律)

此文章可以使用目录功能哟↑(点击上方[+])

 51Nod Problem 1004 n^n的末位数字

Accept: 0    Submit: 0
Time Limit: 1 second    Memory Limit : 131072 KB

 Problem Description

给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字。

 Input

一个数N(1 <= N <= 10^9)

 Output

输出N^N的末位数字

 Sample Input

13

 Sample Output

3

 Hint


 Problem Idea

解题思路:

【题意】
求N^N(N的N次方)的十进制表示的末位数字


【类型】
规律

【分析】

此题正解方法是快速幂

但是我们完全可以通过找规律来求解

因为只需要N^N的末位数字,所以我们完全可以不用考虑其他位数字是多少,而最后一位只有0~9十种情况,这样就方便了我们去找规律

规律如下:

51Nod Problem 1004 n^n的末位数字(规律)_第1张图片

由上表可见,不管以哪个数字作为末位,至多4次就会出现循环,所以我们只需用数组存下每个数字作为末位时的循环部分,那么结果用O(1)的时间就可以查到答案

【时间复杂度&&优化】
O(1)

题目链接→51Nod Problem 1004 n^n的末位数字

 Source Code

/*Sherlock and Watson and Adler*/
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define eps 1e-9
#define LL long long
#define PI acos(-1.0)
#define bitnum(a) __builtin_popcount(a)
using namespace std;
const int N = 10;
const int M = 4;
const int inf = 1000000007;
const int mod = 7;
int s[N][M]={{0,0,0,0},{1,1,1,1},{2,4,8,6},{3,9,7,1},{4,6,4,6},{5,5,5,5},{6,6,6,6},{7,9,3,1},{8,4,2,6},{9,1,9,1}};
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n",s[n%10][(n-1)%4]);
    return 0;
}
菜鸟成长记

你可能感兴趣的:(51Nod)