标签:10 Digit int pow while Rightmost ans mod
思路:
运用快速幂。
代码:
#include <iostream> #include <stdio.h> using namespace std; typedef long long LL; void quick_pow(int x) { int ans = 1, y = x; x = x % 10; while (y) { if (y & 1) ans = (ans * x) % 10; y >>= 1; x = (x * x) % 10; } printf ("%d\n", ans); } int main() { int a; while (cin >> a && a) { for (int i = 1; i <= a; i++) { LL b; cin >> b; quick_pow(b); } } return 0; }
总结:
需要防止溢出。
void quick_pow(int x, int y, int mod) { int ans = 1; x = x % 10; while (y) { if (y & 1) ans = (ans * x) % mod; y >>= 1; x = (x * x) % mod; } printf ("%d\n", ans); }
a^b 求个位的数字 中需要除以10,至于其他题目看题目要求。
每个数都除以10是为了防止溢出
这里的mod个人理解为是大部分按照题目要求需要除以的数,为了防止溢出。
标签:10,Digit,int,pow,while,Rightmost,ans,mod 来源: https://www.cnblogs.com/123-d/p/11204268.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。