牛客网做题时遇到的细节(持续更新)
1. 四舍五入
1 | 单精度保留小数点后两位:a = (int)(a*100+0.5)/100.0; |
2. 输出确定位数的小数
1 | %.1f %.1lf |
在%后加上点和位数表示要保留小数点后几位
3. 输出返回值
1 |
|
打印函数的返回值就是字符个数,\n是一个字符,要单独打印
4. 域宽
指存放输出数据的宽度
1 | printf("%10d",a); |
printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数
m前有0则会在空位补零
如果要把生日分隔成年月日,可以这样写
1 |
|
%0指的是在单个数字前补零,如果不用,单个数字前会有空格
这里没有return 0也能运行,可能是编译器允许的唯一特例。
5. 进制的前导
H表示的是Hex,表示是16进制数。前导标志是0x;
B表示的是Bit,表示是二进制.无前导标志;
O表示的是Octal,也可简写为OCT表示是八进制,前导为0;
D表示是Decem,表示十进制。无前导标志;
原题让输出1234的八进制与十六进制(大写)
1 |
|
用#可以使前导显示,结果的大小写取决于%后x的大小写
6.数据类型强制转换
1 | 如 |
7.次方
用到了pow函数
pow函数用来求x的y次幂
如pow(5,2);
结果为25
8.根号
形式:sqrt(…)
海伦公式:
d=(a+b+c)/2;
e=sqrt((d(d-a)(d-b)*(d-c)));
9.EOF
在stdio.h中就规定了EOF就是-1,EOF即END OF FILE,在while循环中以EOF作为文件结束标志
我们常见到while(scanf(“%d”,a)!=EOF){…}
可用于多组输入
10.位移运算符
<<和>>,通过箭头方向可以很好的辨别,分别是C语言位运算符中的左移运算符和右移运算符,如表达式13<<2,它的运算过程为:
13的用二进制(四个字节,不考虑符号)表示为,0000 0000 0000 0000 0000 0000 0000 1101,那么向左移两位,右侧补0,则变为0000 0000 0000 0000 0000 0000 0011 0100 换成十进制即变为52
同理,再举一个例子,如表达式25>>3,表示25的二进制位向右移三位,由
0000 0000 0000 0000 0000 0000 0001 1001 变为0000 0000 0000 0000 0000 0000 0000 0011 即十进制3
1 |
|
输出为a=52,b=3
应用:
1.左移N位的本质是乘以2的N次方
2.右移N位的本质是除以2的N次方