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; }
在注释后“\\”这样写会跳过该行的下一行语句
继续阅读与本文标签相同的文章
上一篇 :
保险业是人工智能技术和解决方案的主要目标
-
大宗货运如何实现“重去重回”?
2026-05-19栏目: 教程
-
企业官网怎么选择合适的阿里云服务器ECS(新手参考)
2026-05-19栏目: 教程
-
携程、阿里、京东、腾讯iOS春招面试过程以及面试题总结!
2026-05-19栏目: 教程
-
浏览器事件机制中 事件触发的三个阶段
2026-05-19栏目: 教程
-
德媒:德国5G安全标准“一视同仁”,5G建设不排除华为
2026-05-19栏目: 教程
