这是求a^b最后一位的,我的思路是求出0~9循环多少次又回到原来的值,比如2 4 8 16 32 周期是4
然后把这些数存起来就是数组
int c[10][5]={
{0},{1},{2,4,8,6},{3,9,7,1},{4,6},{5},
{6},{7,9,3,1},{8,4,2,6},{9,1}
};
source code:
#include<iostream>
#include<cmath>
using namespace std;
const
int c[10][5]={
{0},{1},{2,4,8,6},{3,9,7,1},{4,6},{5},
{6},{7,9,3,1},{8,4,2,6},{9,1}
};
int main()
{
int a,b;
int sum,i,k;
while(cin>>a>>b)
{
k=1;
if(a>=10)
a=a%10;
sum=a;
for(i=1;i<=k;i++)//最多循环5次
{
sum*=a;
if(sum>=10)
{
sum%=10;
}
if(sum!=a)
{k=k+1;}
}
if(b%(i-1)==0) cout<<c[a][b%(i-1)+(i-1)-1]<<endl;//注意输出,原来我没有
else cout<<c[a][b%(i-1)-1]<<endl;
}
return 0;
}
在此之前我的输出有点问题,那个if条件没有,找了n久,才找出来了,在此我还是建议网上的代码不要贴,只能是参考下思路,代码说不定你看不懂,如果你看的话,而且还有一些精髓是你看不出来的,为什么要这么做呢?这只有自己做了才知道,只有做出了这歩才知道下一步。
除此之外好有另外一种方法,就是快速幂乘,这里我也给大家介绍下