51nod《n^n的末位数字》

1004 n^n的末位数字 
题目来源:  Author Ignatius.L (Hdu 1061)
基准时间限制:1 秒 空间限制:131072 KB 分值: 5  难度:1级算法题


给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字。
Input
一个数N(1 <= N <= 10^9)
Output
输出N^N的末位数字
Input示例
13
Output示例
3

题解心得:

    在还不知道快速幂这个名词之前,首先的反应就是暴力破解,取尾数作为计算量,在乘于的过程中,边取模,但是很明显就是超时了

51nod《n^n的末位数字》_第1张图片

解法一:快速幂

只能去看看讨论区,在讨论区就发现了快速幂这东西,百度了解一下,最终降低了算法的运算量,快速幂真是个好东西啊!!!!!

主要是降低了循环的次数以及运算。快速幂就是一个模板,直接套上去就行了

 快速幂算法——可迅速求出a^b。其主要理论依据如下:

1、当b为偶数时,a^b可以转为a^2的b/2次方。

2、当b为奇数时,a^b可以转为a^2的b/2次方,再乘以a。

对比奇偶明显就看的出是奇数才会多点东西,用if就ok了


解法二:幂的性质

    在我百度的过程中,发现了一个很有意思的结论,就是说,幂的尾数是四位一循环,面对这个有趣的说法,我特意去百度了相关的知识,但找不到什么,但是却发现了这样的信息

51nod《n^n的末位数字》_第2张图片

相关文章点击打开链接,


原创代码:

解法一:

#include
void f(int n)
{
	int t=1,b;
	b=n;
	n=n%10;
	while(b>0)
	{
		if(b%2==1)
			t=t*n%10;
		n=n*n%10; //r如果这个不处理的话,迟早都会超过数据范围 
		b=b/2;
	}
	printf("%d",t);
} 
int main()
{
	int n,t=1,i,b;
	scanf("%d",&n);
	f(n);
}

解法二:

#include
#include
int main()
{
    int n,b,c;
    scanf("%d",&n);
    b=n%10;
    c=n%4;
    if (c==0)
        c=4;
    c=pow(b, c);
    printf("%d",c%10);
}

你可能感兴趣的:(算法学习,51nod,题解答案)