某些自己易犯的错误

Blog 2


讲一些最近在写代码过程中容易错且自己不太容易发现的错误吧。

1. 数值定义上,int型和long long型。如果int定义m=10^7,而m会有n=10^3的类似数据累加,就会溢出,导致Wrong Answer。所以要看题目到底是定义成int还是long long,有时候不太确定的或者在边缘附近的,就简单地定义成long long好了。

2. Runtime Error。数组越界,包括定义时开的太小,在函数中赋值的时候超过了下标范围或是在函数中赋值时数组下标到达了负数或超出范围;也有可能是除0问题,一般除数可能为零的话,那种情况需要单独讨论。

3.强制类型转换,注意写法和类型的位置。有向下取整函数floor和向上取整函数ceil,头文件是<cmath>。

     比如PO就1604 的那题Cable Master 的输出,正确的应该是 printf("%.2lf\n",(double)(int)(ed*100)/100);,或者用floor,

     printf("%.2lf\n",floor(ed*100)/100);,而当时一直是这样的输出:printf("%.2lf\n",(double)((int)(ed*100)/100)); WA了很多次,却一直在找其他

    地方的错误,根本没意识到是输出的问题。

4.二分的时候注意初始时头,尾的赋值。若赋值不当会导致范围内的某些值(尤其是边缘值)取不到而Wrong Answer。

5. 二分时有小数位精度要注意eps取值合适,太小会导致TLE甚至死循环;太大则精度不准。
另外例如%.4f类的取位是四舍五入,而不是尾数截留。

6.在编译时通过,而在运行时输入数据后崩溃,如果在scanf时的取地址符号&没有忘加的话,可能是数组越界,特别是在方向搜索的时候,某点加上方向坐标后下标值会不会是负数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值