加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

一道关于大数的ACM题的讨论过程——沟通与发散思维

发布时间:2020-12-14 03:36:18 所属栏目:大数据 来源:网络整理
导读:最近打算重新巩固基础,今天刚刚注册了POJ,看看题,在ACM群里灌灌水。今天就有一次小成功,吹得大点叫头脑风暴,说小点就是水文一篇,题本身比较水,技术层面很水很低端~感觉除了个人还不算全部丢失的一些数学小修养外,摸清来龙去脉,充分沟通是非常重要

最近打算重新巩固基础,今天刚刚注册了POJ,看看题,在ACM群里灌灌水。今天就有一次小成功,吹得大点叫头脑风暴,说小点就是水文一篇,题本身比较水,技术层面很水很低端~感觉除了个人还不算全部丢失的一些数学小修养外,摸清来龙去脉,充分沟通是非常重要的。保留一份,将来没准对自己还是一个提示,一份灵感。


故事还要从群友的一个问题说起:

某群友遇到了一个问题,要储存非常大非常大的数,什么大整数表示法之类的说实话我也不懂,知道原则上讲,整型不同于浮点,就是躺在那里的二进制数(先不说源码补码的问题~),那么很容易的,把他们肢解成更多个整型数,到时候想办法拼起来,理论上也不是不可行的,到时候运算怎么办?还得想办法,自定义函数去吧,或者转成double运算。没有深究这个问题,因为今天重点不在这。

为什么说沟通重要,重要就在这了,他的这个问题把我们引向了没有建设性的方向,顺着这个方向走,多少都是无用功。想找到有建设性的解决方法,还是要摸清需求,我也这样做了,所以把思路放在他的题上,更有针对性,也纠正了大整型的错误解题思路。

另外,实践也很重要,我不动手敲两下,就不会发现那个pow函数返回的结果已经是inf正无穷了,所以重新整理思路,想起来了乘法小规律,你要个十百三位的结果,那在万位上的数字不可能影响结果——结论就是在数据输入的时候就截断,而不是等到输出数据再处理。在该群友公布“参考答案”前找到了思路,嘿嘿,淫荡一笑。。。。


不过~是该好好补补数学基础了,感觉解题重要的是思路,然后才是写成代码,那些比较难得数学题直接把人秒杀了。看看那些ACM决赛题,都眼晕。不参加也总不能连看都看不懂吧。

顺便吐槽OJ系统的规则:

原来他对你的程序要求也不严,你绞尽脑汁想什么输入的非法验证,循环的严密,结果没头绪,不知那么难的问题要怎么解决好。殊不知,那个问题根本不用你操心,竞赛指导老师一道非常不严密的题就把你秒了,人家的就是能提交,就是能AC,其实,看起来,规则很简单。比如,所谓输入正整数,你不用去判断他是不是负数、是不是小数、是不是非法了,这些是对输入者的限制,和你没半毛钱关系,你只管闭着眼睛处理他要给你的数据格式和类型。甚至-1结束这种事都不用你时刻判断,你只需要在特定的场合,特定的位置(比如输入一组数之后,循环之外,或者某一行第一个位置,第二个位置就不行了,按他那破代码~),判断是否-1,判断是否退出,感觉这样你解题思路就进一步不严密,长时间下去容易禁锢思维,应试教育。不过好听点的解释是后边算法太难,你没心思纠缠这些细节,因为我还没玩转那么难的题,所以不好评论这种想法对不对。

========================================================================================================================================================================================================================================================================

下边是聊天过程


【大牛】xxxxx(xxxxx)? 8:39:22 PM
有没有比long long还要大的整数类型
【菜鸟】huqinwei987(871452271)? 8:41:58 PM
大整数表示法
【大牛】xxxxx(xxxxx)? 8:42:14 PM
具体怎么做
用数组吗
【菜鸟】天心(xxx)? 8:42:25 PM
字符串
【大牛】xxxxx(xxxxx)? 8:42:42 PM
我要存一个阶乘的结果
这个结果有点大

字符串怎么做
result是接受结果的
【大牛】xxxxx(xxxxx)? 8:43:55 PM
result定义成了long long类型
但是还是不够大啊
【菜鸟】huqinwei987(871452271)? 8:44:17 PM
我感觉很别扭啊
【大牛】xxxxx(xxxxx)? 8:44:23 PM
大整数和字符串怎么去接受
【菜鸟】huqinwei987(871452271)? 8:44:29 PM
你double乘法,也是要丢精度的吧
【大牛】xxxxx(xxxxx)? 8:44:30 PM
为什么
【菜鸟】huqinwei987(871452271)? 8:44:57 PM
既然精度都丢了,就用double就行了呗
【大牛】xxxxx(xxxxx)? 8:45:12 PM
pow里边不可以放int的
只能转化一下
【菜鸟】huqinwei987(871452271)? 8:45:25 PM
我不太明白最终目的
是什么输出什么的要整型?
最后就用double存就行了么
还是有特殊要求
【大牛】xxxxx(xxxxx)? 8:46:23 PM
看看这个



这是我的代码



【菜鸟】huqinwei987(871452271)? 8:47:23 PM
不到10000,不用long吧
【大牛】xxxxx(xxxxx)? 8:47:51 PM
6789的10000会不到1000吗
是次方
【菜鸟】huqinwei987(871452271)? 8:48:03 PM
只要输出的时候留下那三位就行了吧
【大牛】xxxxx(xxxxx)? 8:48:08 PM
根本就放不下

是啊
【菜鸟】huqinwei987(871452271)? 8:48:22 PM
你输入的是不到10000,不代表输出啊
那个函数输出肯定就不一样了
【大牛】xxxxx(xxxxx)? 8:48:42 PM
问题是pow的返回值用什么接受啊
【菜鸟】huqinwei987(871452271)? 8:48:46 PM
用double接受,最后做处理
double就够了
【大牛】xxxxx(xxxxx)? 8:48:48 PM
这个返回值应该很大
可以试试
【菜鸟】huqinwei987(871452271)? 8:49:02 PM
最后再做处理,留下那三位输出
【大牛】xxxxx(xxxxx)? 8:49:03 PM
也只能用double了
double的话就不能%了
【菜鸟】huqinwei987(871452271)? 8:50:05 PM
其实所有数据都用double就完了,考虑到少占用点空间,普通int也够了,结果double,或者float,我感觉对结果都不影响
【大牛】xxxxx(xxxxx)? 8:50:34 PM
那放在double里边就得对double的后三位处理了吧
【菜鸟】huqinwei987(871452271)? 8:50:44 PM
你这是a的b次幂,最后出的结果会损失精度到什么情况,我还真不敢乱说
是小数点左边三位吧
用哪种模运算之类的就差不多了感觉
【大牛】xxxxx(xxxxx)? 8:51:41 PM
他说要结果的最后三位
不是小数点的左边三位
最后这三位怎么取
【天神】逝水无痕(1345305219)? 8:52:12 PM
。3f
【菜鸟】huqinwei987(871452271)? 8:52:18 PM
输入的是正数,所谓“结果”也是整数部分了
【天神】逝水无痕(1345305219)? 8:52:22 PM
3
【大牛】xxxxx(xxxxx)? 8:53:09 PM
额,是这个意思
我刚才想到了科学计算法
搞混了
3是什么意思
.3f
怎么取小数点的左边三位
【菜鸟】huqinwei987(871452271)? 8:54:14 PM
.3f是一种欺骗,考虑到OJ只看结果,把浮点数只输出相应部分就能应付了吧。。
。3f是右边吧
%3f,不过这是printf,c++怎么用没印象
【大牛】xxxxx(xxxxx)? 8:55:08 PM
.3f成了保留三位小数了吧
【菜鸟】huqinwei987(871452271)? 8:55:21 PM
用%3f不用。
不过这样能不能去掉小数点
【大牛】xxxxx(xxxxx)? 8:55:55 PM
%3f这个是什么意思,%代表什么来着
【菜鸟】huqinwei987(871452271)? 8:56:12 PM
格式控制,printf中的,所以说C++不记得怎么弄了
3代表长度吧
%4.3f没记错的话,整数部分4位,小数部分3位
【大牛】xxxxx(xxxxx)? 8:57:28 PM
那和小数点左边三位没关系啊,我查查吧
等下告诉你们
【菜鸟】huqinwei987(871452271)? 8:58:04 PM
左边的话,你就模运算
【大牛】xxxxx(xxxxx)? 8:58:28 PM
double类型不可以摸啊
【菜鸟】huqinwei987(871452271)? 8:58:32 PM
确实不能把多的部分消了,那个功能是对齐用的
转成整型的
【菜鸟】huqinwei987(871452271)? 8:59:36 PM
你看这样行不行



不过是C语言
【菜鸟】huqinwei987(871452271)? 9:00:40 PM
多余的你不管啦,直接赋值给整型吧,反正就留那三位
【大牛】xxxxx(xxxxx)? 9:01:19 PM
问题是由double转换为int是要丢精度的
【菜鸟】huqinwei987(871452271)? 9:01:27 PM
你只要那三位
【大牛】xxxxx(xxxxx)? 9:01:30 PM

只要最后的三位
这种思路肯定是做不到的
不能用pow这个函数就
因为你没法接受这么大的数
【菜鸟】huqinwei987(871452271)? 9:02:12 PM
我试试那个函数的结果,那函数什么库来着,math
【大牛】xxxxx(xxxxx)? 9:02:15 PM
用double的话最后也没法处理啊
恩,对的
【菜鸟】huqinwei987(871452271)? 9:04:45 PM
678的1000,结果inf了
正无穷了怎么搞
【大牛】xxxxx(xxxxx)? 9:05:29 PM
给你看个超级简单的方法吧
【菜鸟】huqinwei987(871452271)? 9:05:58 PM
我淫荡的一笑
计算前线截断
留后三位就完了

【大牛】xxxxx(xxxxx)? 9:06:25 PM
呵呵,好聪明啊

【菜鸟】huqinwei987(871452271)? 9:06:36 PM 好像混了 【大牛】xxxxx(xxxxx)? 9:06:40 PM 【菜鸟】huqinwei987(871452271)? 9:07:39 PM 我要不敲两下,看到inf,也还跟你扯数据类型呢 【大牛】xxxxx(xxxxx)? 9:08:07 PM 这个就是思路啊 有时候可以很简单的 就看你想到不 【菜鸟】huqinwei987(871452271)? 9:08:33 PM 一些数学技巧 【大牛】xxxxx(xxxxx)? 9:08:57 PM 恩,就是啊,数学技巧 多谢啦 【菜鸟】huqinwei987(871452271)? 9:09:36 PM 你都找到答案了 没帮上 【大牛】xxxxx(xxxxx)? 9:09:59 PM 你也是做acm吗 还是工作了 【菜鸟】huqinwei987(871452271)? 9:10:10 PM 都老了。。。 练习练习 【大牛】xxxxx(xxxxx)? 9:10:45 PM 额,现在做社么工作啊 【菜鸟】huqinwei987(871452271)? 9:10:58 PM 辞了,读个工程硕士 很水 【大牛】xxxxx(xxxxx)? 9:11:12 PM 硕士啊 【菜鸟】huqinwei987(871452271)? 9:11:28 PM 都是混子 【大牛】xxxxx(xxxxx)? 9:12:02 PM 我也是混混,然后找工作 【菜鸟】huqinwei987(871452271)? 9:12:16 PM 我也是脑子生锈了,得巩固巩固 【大牛】xxxxx(xxxxx)? 9:12:51 PM 恩,那你也做做题吧,我以后有问题再请教 【菜鸟】huqinwei987(871452271)? 9:13:04 PM 不敢~ 讨论 【大牛】xxxxx(xxxxx)? 9:13:40 PM 【大神】傻子(1154573890)? 9:13:45 PM 你们俩谦虚了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读