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:
思路:开始想到了同余模,可是没有往深处想,发现只用同余模和快速幂是无法解决的,一是因为数太大,二是算出来的数也无法保存,胡思乱想想到用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)); } }
相关文章推荐
- uva 10110——Light, more light
- uva 11728——Alternate Task
- uva 11490 ——Just Another Problem
- 中国剩余定理即孙子定理的五种解法
- uva 10710——Chinese Shuffle
- uva 10692——Huge Mods
- uva 10312——Expression Bracketing
- 卡特兰数的性质及其应用扩展
- uva 12034——Race
- UVA 10079 - Pizza Cutting
- uva 10883——Supermean
- 安装php的php-protobu扩展及使用
- UVA - 10497 Sweet Child Makes Trouble
- hdu 1659——Bus System(Floyd)
- UVA10843——Anne\'s game
- linux打包压缩命令汇总
- 一年后,我又回来啦
- RSA加密解密
- ssh-keygen的用法
- *第九周*数据结构实践项目一【猴子选大王(数组)】