c++算法竞赛需要注意的三点(精度、字符串、编译器)
时间:2018-11-08
本文章向大家介绍c++算法竞赛需要注意的三点(精度、字符串、编译器),需要的朋友可以参考一下
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\)
溢出
- 位运算左移:
cout<<(1<<31);
控制台输出:\(-2147483648\)
正确写法:
cout<<(1LL<<31);
注意,以下写法还是会溢出:
cout<<(1<<31LL);
- 循环:
因为int型变量溢出,以下循环无法退出:
for(int i=0;i<=2147483647;i++)if(i<0)cout<<"overflow";
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; }
在注释后“\”这样写会跳过该行的下一行语句
- 10个超有趣的Linux命令
- 张戈博客惊现WordPress恶意代码,各位WP博主要注意下了!
- 分享一个多说头像的动态酷炫CSS样式
- 在Linux中发现IP地址冲突的方法
- 教你如何查看Linux的CPU负载
- 想打造一个神经网络,自动给黑白照片上色?这儿有一份超详细教程
- WP_Widget_PostViews has a deprecated constructor 报错解决
- 详解Linux系统的CPU负载均值
- Linux服务器的进程查看命令详解
- 另类SEO分享:利用JS封装iframe躲过搜索引擎的抓取
- Linux :MAC 地址克隆方法
- 解决WordPress修改数据库表前缀后无法登陆的问题
- 解决启用WP-Super-Cache后出现的几个问题
- Shell下制作自解压安装包,实现脚本的简单加密
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法