博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(a*b)%c 小的技巧
阅读量:6001 次
发布时间:2019-06-20

本文共 619 字,大约阅读时间需要 2 分钟。

(a*b)%c这个问题看上去好简单啊。

当然我们不是来说这么简单的问题了。你想一想,我们会不会遇到这种情况,a是__int64 ,b也是__int64 当两个数足够大的时候我们直接相乘的就会出现__int64越界的情况,结果就会错误。

所以我们今天记录一下解决这样的问题的方法。不要让这些小的问题妨碍我们来做大的问题。

这里用到了2进制数,和位运算。当然不是转化。仅仅要你会能理解即可

我们先来这样处理。

1。我们分别将a,b对c取模。

2。这里不会的看一下有关位运算的知识。这里我也不知道该怎么说了,先看看程序吧。我把程序中的代码凝视加的好好的。

__int64 mult_mod(__int64 a,__int64 b,__int64 c){    a%=c;    b%=c;    __int64 ret=0;//ret记录终于的结果    while(b)//推断不是不是为0了    {        if(b&1)//假设b的二进制中的最后一位为1 那么加上a		{			ret+=a;ret%=c;		}        a<<=1;a%=c;//a随着b中二进制位数而扩大每次扩大两倍。        b>>=1;//b来缩小两倍 去掉最后一位 由于当前最后一位我们用完了,    }    return ret;}
好了!

这个会二进制的应该一看就懂,不会的大概不好理解,我的表达能力有限,仅仅能这样了。

感谢自己坚持。

转载地址:http://didmx.baihongyu.com/

你可能感兴趣的文章
Making HTTP requests via telnet - Tony's Place
查看>>
千元机市场再添“新宠”,红米Note7和vivo Z3谁才是千元王者
查看>>
荣耀10GT升级EMUI 9.0体验分享:这可能是最好用的手机操作系统
查看>>
ZStack基于华芯通打造ARM国产云平台 助力云上贵州多项应用
查看>>
200本“保护日记”记录黄山迎客松生长变化
查看>>
多方力量携手呵护“中华水塔”青海三江源
查看>>
互联网的下一波红利在哪里?
查看>>
拿姐姐身份证登记结婚竟然成了!婚姻户籍信息共享难在哪儿
查看>>
恒大造车加速,联手柯尼塞格打造顶级新能源车
查看>>
JAVA大神说一个例子让你几分钟学会Annotation
查看>>
富士康要用机器人生产iPhone了?那么多工人怎么办?
查看>>
Python获取当前页面内的所有链接的五种方法
查看>>
【进阶2-3期】JavaScript深入之闭包面试题解
查看>>
【Chrome扩展开发】定制HTTP请求响应头域
查看>>
利用 CocoaPod 和 Git 管理组件中的一些细节梳理
查看>>
聊聊storm trident spout的_maxTransactionActive
查看>>
面向Vue新人:写一个简单的倒计时按钮
查看>>
区块链初体验
查看>>
关于手势处理
查看>>
super
查看>>