您的位置:首页 > 其它

uva 10515——Powers Et Al.

2015-10-26 17:08 387 查看
题意:这个题目题中的图片已经给的够清楚了,就算不怎么读题,也能yy大概的意思,况且题目也很短,很容易都出来就是给定 a,b,然后求a^b的个位数!

思路:开始想到了同余模,可是没有往深处想,发现只用同余模和快速幂是无法解决的,一是因为数太大,二是算出来的数也无法保存,胡思乱想想到用double,什么long  double都搞出来了,不过越搞越复杂,反而陷入思维深渊!后来想到底数要保留到最后一位,但是不知道怎么使指数降下来,后来看了题解,才明白个位数的指数次都是以1,2,4,作为循环,这就好办了,直接%4,就能对指数精简化了!后面至于用快速幂,打表,或者pow已经不是重点了,因为都能算出来了!

code:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;

int cal(string n)        //化指数为2位数
{
if (n.size()==1) return n[0]-'0';
int t=n[n.size()-1]-'0';
t=t+(n[n.size()-2]-'0')*10;
t%=4;
if (t==0) t=4;
return t;
}
int sol(int a,int b)   //一位数的2位数次幂,也可pow,快速幂,打表
{
int t=1;
for (int i=0;i<b;i++)
t*=a,t%=10;
t%=10;
return t;
}
int main()
{
string m,n;
while (cin>>m>>n)
{
if (m=="0"&&n=="0") break;
int a=m[m.size()-1]-'0';   //只取末尾一位
int b=cal(n);
printf("%d\n",sol(a,b));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: