设为首页 加入收藏

TOP

算法竞赛中c++一些需要注意的错误
2018-11-07 16:11:35 】 浏览:92
Tags:算法 竞赛 一些 需要 注意 错误

1. 关于精度:

取整

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

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

    int cal(int x,int y)
    {
      return x/y+(x%y!=0);
    }

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

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

    赋值

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

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

LL inf=1000000000000000007LL;
  • double:
 double x=0.0;
  x=-x;
  cout<<x;

控制台输出为:-0

2. 关于字符串:

读入:

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

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

3. 关于编译器:

报错:

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

    运行:

    int main()
    {
    // \
    cout<<"hello world";
    return 0;
    }
    控制台无输出。
    在注释后“\”这样写会跳过该行的下一行语句
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇根据sockfd获取TCP连接本地地址以.. 下一篇数据结构二叉树构造及遍历详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目