题目:
链接:https://cn.vjudge.net/problem/HRBUST-1140
分析:
1.数据太大,但是结果范围是( 0 <= res <= 9 )。
2.有个结论:数字和公式:abcd % 9 = n % 9。(n = a + b + c + d)。
简单证明:
(a + b + c + d) % 9
= (999a + 99b + 9*c + a + b + c + d) % 9
= abcd % 9
3.使用快速幂取余 求 ab%9 。
4.注意:当a==0时,res=0 。
代码:
#include<iostream> #include<cstdio> using namespace std; #define ll long long ll quickpow(ll a,ll b,ll k) { ll res=1; while(b) { if(b&1) res=(a*res)%k; a=(a*a)%k; b>>=1; } return res; } int main() { ll a,b,k=9; while(cin>>a>>b) { ll res=quickpow(a,b,k)%k; if(a==0) res=0; else if(res==0) res=9; cout<<res<<endl; } return 0; }
原文:http://www.cnblogs.com/tristatl/p/7241992.html