2018个2018相乘的末两位

Hometown and miss 2019-05-30 10:12:50
江湖救急!!! 朋友
...全文
1002 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CaptainXue 2019-05-30
  • 打赏
  • 举报
回复
因为2018^2018已经超出整型数据的范围,结果会是一个随机值。而题目只要求得到末尾两位数,所以为了防止数据溢出,每次计算后都只去末尾两位数。通过%100就可以得到末尾两位数。有关数据的溢出详细内容,可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90452160
Hometown and miss 2019-05-30
  • 打赏
  • 举报
回复
引用 2 楼 Italink的回复:
因为2018^2018已经超出数值型数据的范围,所以进行简化,末2位只跟前一次计算末两位的值有关,每次取最后的两位(%100),进行计算,就跟你求3个12相乘取最后一位,其实只需算2*2*2,取最后一位即可
太谢谢你了
IT-AHMD 2019-05-30
  • 打赏
  • 举报
回复
一个整数%100 剩下了是不能被100整除的个位和十位数 也就是如题的后两位数
angel6709 2019-05-30
  • 打赏
  • 举报
回复

num=18
count=2018
exp=1024
countrem=count
tempexp=exp
res=1
def x(texp):
    r=18
    for i in range(0,texp): 
        r=r*r%100
        texp=texp>>2
    return r 

for j in range(0,countrem):
    countrem=countrem-exp
    res=res*x(tempexp)%100
    exp=exp>>2
    tempexp=exp
print (res)
angel6709 2019-05-30
  • 打赏
  • 举报
回复
1.减少计算量 2.减少技术量 3.减少计算量
Italink 2019-05-30
  • 打赏
  • 举报
回复
因为2018^2018已经超出数值型数据的范围,所以进行简化,末2位只跟前一次计算末两位的值有关,每次取最后的两位(%100),进行计算,就跟你求3个12相乘取最后一位,其实只需算2*2*2,取最后一位即可
Hometown and miss 2019-05-30
  • 打赏
  • 举报
回复
引用 楼主 Hometown and miss的回复:
江湖救急!!! 朋友
a=(a*2018)%100; 为什么用这个算呀

70,005

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧