求问个c语言代码理解问题,问题和答案代码在下面,可是代码我看不懂

求13的n次方(12<n≤130000000000)的最后三位数。例如:13的13次方的最后三位数是253,13的20次方的最后三位数是801。#include<stdi... 求13的n次方(12<n≤130000000000)的最后三位数。例如:13的13次方的最后三位数是253,13的20次方的最后三位数是801。
#include<stdio.h>
int fun(long long n)
{ int k=13,t=1;
while(n>0)
{
if(n%2==1)
t=t*k%1000;
k=k*k%1000;
n>>=1;
}
return t;
}
int main()
{
long long n;
while(scanf("%lld",&n)!=EOF)
printf("%03d\n",fun(n));
return 0;
}
展开
 我来答
fu9lei
2015-03-17 · TA获得超过679个赞
知道小有建树答主
回答量:482
采纳率:16%
帮助的人:213万
展开全部
主要是这段吧?
while(n>0)
{
if(n%2==1) //如果n是奇数 ,为了n>>=1不漏掉末位1,需要多一次运算
t=t*k%1000; //为什么是t*k我也不明白,%1000是只需要后三位
k=k*k%1000; //第一次13^1 * 13^1;第二次13^2 * 13^2;第三次13^4 * 13^4;幂倍加
n>>=1; //等效于 n = n/2; 幂倍减
}
更多追问追答
追问
内个 还在吗
这个算法是什么思路啊 这个我不知道
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式