uva 10515——Powers Et Al.

题意:这个题目题中的图片已经给的够清楚了,就算不怎么读题,也能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));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值