这个题仔细一想,这原来是快速幂加取余啊
有一个规则就是积的模等于各自的模的积再取模
很好下面开始码代码
#include<stdio.h>
int main()
{
long long int n;
scanf("%I64d",&n);
int c=(int)n%10;
int sum=1;
for(long long int i=0;i<n;i++)
{
sum=(sum*c)%10;
}
printf("%d",sum);
return 0;
}
点击提交时间超限。然后仔细再想了一下,这一定有规律啊!
然后穷举了一下
#include<stdio.h>
int main()
{
// long long int n;
// scanf("%I64d",&n);
for(int n=0;n<100;n++)
{
int c=(int)n%10;
int sum=1;
for(long long int i=0;i<n;i++)
{
sum=(sum*c)%10;
}
printf("%d\n",sum);
}
return 0;
}
穷举输出后发现
他的输出是这样的(为了方便观察每十个加一个空格)。
从n=0开始
1147656369 0163656749 0147656369 0163656749 0147656369
发现它N的尾数是一个以20为周期的数列。
综合考虑n=0的情况时
写出了以下代码
#include<stdio.h>
int main()
{
int a[20]={0,1,4,7,6,5,6,3,6,9,0,1,6,3,6,5,6,7,4,9};
long long int N;
scanf("%l64d",&N);
if(N==0)
{
printf("1");
return 0;
}
printf("%d",a[N%20]);
}
提交,通过