hoj 1097

//杭电1097

//求a^b的个位数字

//思路:(1)只计算个位数(2)计算过程中会出现周期
#include <stdio.h>
int main()
{

//此处使用__int64
 __int64 a,b;
 while(scanf("%I64d%I64d",&a,&b)!=EOF)
 {
  __int64 data[10];

 //times为循环周期
  int times =0;
  if(a>9)
  {
   a = a % 10;
  }
  data[0] = a;
  __int64 start = a;
  times++;
  a = a*start %10;
  while(a!=start)
  {   
   data[times] = a;
   times++;
   a = a*start %10;
  }
  int i = b% times -1;

 //输出时分两种情况,特别注意i<0的处理
  if(i<0)
     printf("%I64d\n",data[times-1]);
  else
     printf("%I64d\n",data[b % times-1]);
 }
 return 0;
}

你可能感兴趣的:(OJ)