【算法详解-高精】(7)大大小小&其他符号

终于不用写四则运算了!!!
————————————华丽的分割线————————————
给你们两个数你们是怎么比大小的呢?
例:1435&998
众人:这还不简单?一眼看出来1435大。
光速打脸ing
好那这两个数呢?
12460845612851048519385103573911463575685342546754386367&31928473625784746372364809476547685673621029387465723618
如果你还能一眼看出来我就回火星。。。(如果你真要算我告诉你是第二个大)
所以想想小学数学老师是怎么教你们比大小的呢?
1:看位数:先比位数,位数多的大
2:位数若一样多,一位一位比直到发现不同时看谁大谁就大。
我们可以以此码代码:

if(len!=b.len)return len<b.len;//小于号
for(int i=len-1;i>=0;i--)
	if(s[i]!=b.s[i])return s[i]<b.s[i];
return false;

Q:大于号呢小于号呢等于号呢大等号呢小等号呢
A:有了小于号就可以乱搞了
给你个代码自己好好体会

bool operator>(const bignum&b)const{return b<*this;}
bool operator>=(const bignum&b){return !(*this<b);}
bool operator<=(const bignum&b){return !(b>*this);}

Q:那等于呢
A:等于是一种又不大有不小的中平的意境~~~~(好哲学
所以代码出来了

bool operator==(const bignum&b){return !(b<*this)&&!(*this<b);}
//既不大又不小嘛~ ~ ~

————————————华丽的分割线————————————
好了我们再说一些其他的符号
第一个登场的是我们最著名也是最常用的符号:=
我们要怎么给高精数赋值呢?
1。int赋值:
很简单吧,就是把int类型的数%10存进去再除10再%10存进去~
不过还有一种方法:转char
Q:为什么要转char?
A:char常数最小~
Q:怎么转char?
A:sprintf(s,"%d",num);
Q:那char赋值怎么写?
2。char赋值:
这个很好理解吧就是把每个位都-"0"然后存。。。
不过这两种方法一定要记得更新长度!!!
3。高精赋值
这个。。。struct当中本来就有同一个类型赋值的功能啊。
————————————华丽的分割线————————————
五则运算:%
mod运算。。。基本思路可以参考除法,所以归到其他符号
高精mod高精:
和除法一样,就是不用记答案,不过最后返回的是余数。
高精modint:
和上面一样
end
————————————华丽的分割线————————————
/=,+=,-=,*=,%=
这个很好弄吧,不过是把五则运算和赋值一起进行。。。
代码(就贴+=):

bignum operator+=(const bignum&b){*this=*this+b;return *this;}

————————————华丽的分割线————————————
++,--
这个代码上面没写,就讲一下。
++:先将个位+1,然后逐级进位直到进不了位为止。
--:从个位开始往上看直到没有0,把最上面那一位-1,然后后面全变成9
————————————华丽的分割线————————————
左移,右移,异或。。。
喂我这是10进制又不是2进制搞不了2进制符号的
有兴趣的童鞋可以写个2进制高精
————————————华丽的分割线————————————
附上本蒻头像
滑稽熊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值