C++ 学习

牛客CPP2 实现四舍五入

这里看到了两种做法,第一种实现是: 由于C++中double类型是自动四舍五入的,所以直接格式化输出0位小数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <iostream>
using namespace std;

int main() {
    double a;

    cin >> a;
    
    printf("%.0f", a);
    
    return 0;

}

在题解中看到更加优雅的实现方法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;

int main() {
    double d;
    cin >> d;
    
    if (d > 0) {
        cout<<(int)(d+0.5);
    }
    else {
        cout<<(int)(d-0.5);
    }
    return 0;

}

这个是游戏编程里常用的方法,正数浮点数+0.5(负数浮点数-0.5)后强制类型转换相当于四舍五入

这个原理是:由于强制转型的时候程序会直接截断小数(向零取整),所以对任意一个正数加0.5,如果它的小数部分>0.5 则进一,然后直接截断,对于负数同理,减去0.5,然后向零取整.

这样就实现了四舍五入的功能.

endl 和 /n 的区别:

endl: endl 会输出 ‘\n’ ,然后立即刷新缓冲区并输出到屏幕上,由于要刷新缓冲区, endl 会比 \n 慢一点

牛客CPP4 获取两数中的较大值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <iostream> 
using namespace std;

int main() {
    int a;
    int b;
    
    scanf("%d%d", &a,&b);
    printf("%d", a>b?a:b);
    
    return 0;
}
Licensed under CC BY-NC-SA 4.0
Build by Oight
使用 Hugo 构建
主题 StackJimmy 设计