【算法详解-高精】(2)高精的基础

这里来到了我们高精的(正式)第一章~
————————————华丽的分割线————————————
一天,某人刷题ing。。。
某题:请输出n^2。。。
该人:哇好水还普及组难度出题人是**吗。。。
于是愉快的写了一发上去。。。
WAWAWAWAWAWAWAWAWAWA
然后才看到说明:
n<=10^50
某人:这怎么过啊int存不了longlong存不了无符号longlong也存不了double吃精度整么搞啊。
这时候就要用到高精度了。
如果让人算20位以上的加减法总是能算出来的吧。
那么让计算机模拟人的算法不是也能算?
所以我们可以struct一个数据结构——高精度
首先我们算±*/的时候是一个位一个位弄的对不?
所以搞高精也可以一个位一个位的存。
所以我们定义一个struct:

struct bignum
{
	int len,s[maxn];
}

//len表示位数
然后预处理一下(不知道语句什么意思的百度谢谢):

bignum(){memset(s,0,sizeof(s)),len=1;}

定义完这些以后,基础大概就结束了
不过还有一个地方:我们定义±*/等运算符要怎么定义?
目前有两种普遍的方法:
1.搞个函数
这个想法的优点是简洁明了简单易懂,不过有一个严重的缺点:
如果你要搞一个算式。。。
用普通的中缀表达式:((a+b)*c+d) e
用函数:
time(add(time(c,add(a,b)),d),e)
把简洁明了简单易懂给我去掉。。。
2.搞个operator(不懂去百度。。。)
一个很普遍的做法。。。
不过技巧比较高,而且函数变量较难理解,不过定义了以后用起来。。。
原式:f=(a+b
c)/e<2?a/b:a%b+22 c(什么奇怪的东西)
代码:f=(a+b
c)/e<2?a/b:a%b+22 *c
就是这么有趣
以后的代码都用这一类表达方法~~~,所以一定要理解透!!!
————————————华丽的分割线————————————
所以呢?
所以就没了。。
The End。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值