经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
算法竞赛中c++一些需要注意的错误
来源:cnblogs  作者:DemonDeLaplace  时间:2018/11/8 9:52:46  对本文有异议

1. 关于精度:

取整

  • 除法取整:
    • (除数为正)被除数为正时系统除法为向下取整,被除数为负时系统除法为向上取整。
    • 向上取整(被除数非负,除数为正):
      一般写法(有bug):
    1. int cal(int x,int y)
    2. {
    3. return (x-1)/y+1;
    4. }

    上述写法只适用于x为正的情况,x为0时有错误。
    正确写法:

    1. int cal(int x,int y)
    2. {
    3. return x/y+(x%y!=0);
    4. }

    1. int cal(int x,int y)
    2. {
    3. return (x+y-1)/y;
    4. }
  • 库函数(cmath库)

    (返回值为double)
    向上取整:ceil(x);
    向下取整:floor(x);
  • 四舍五入:
  1. LL cal(double x)
  2. {
  3. return (x>=0.0)?(LL)(x+0.5):(LL)(x-0.5);
  4. }
  • 除数为正通用:
    • 向上取整:
    1. int cal(int x,int y)
    2. {
    3. return (x>=0)?(x+y-1)/y:x/y;
    4. }
    • 向下取整:
    1. int cal(int x,int y)
    2. {
    3. return (x>=0)?x/y:(x-(y-1))/y;
    4. }

    赋值

  • 科学计数法:
  1. LL inf=1e18+7;

上述写法有错,因为科学计数法为double型,由于精度问题,inf实际被赋值为1e18.
正确写法:

  1. LL inf=1000000000000000007LL;
  • double:
  1. double x=0.0;
  2. x=-x;
  3. cout<<x;

控制台输出为:\(-0\)

溢出

  • 位运算左移:
  1. cout<<(1<<31);

控制台输出:\(-2147483648\)
正确写法:

  1. cout<<(1LL<<31);

注意,以下写法还是会溢出:

  1. cout<<(1<<31LL);
  • 循环:
    因为int型变量溢出,以下循环无法退出:
  1. for(int i=0;i<=2147483647;i++)if(i<0)cout<<"overflow";

2. 关于字符串:

读入:

  1. int x=1;
  2. char s[1];
  3. scanf("%s",&s);
  4. cout<<x;

输入:a
控制台输出:0
这是因为读入a之后还读入了一个换行符,覆盖了x的内存。所以,字符数组最好不压边界开(除非用getchar)。

3. 关于编译器:

报错:

  • id returned 1:
    • 一种情况是该源文件其可执行文件正在运行
    • 另一种情况是主函数名拼错了:
    1. int mian()
    2. {
    3. return 0;
    4. }

    运行:

    1. int main()
    2. {
    3. // cout<<"hello world";
    4. return 0;
    5. }
    控制台无输出。
    在注释后“\”这样写会跳过该行的下一行语句
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号