一、C语言向上、向下取整问题
math库—— ceil函数是取上整,floor函数是取下整
ceil,用于返回大于或者等于指定表达式的最小整数,用法是double ceil。返回不小于 value 的下一个整数,value如果有小数部分则进一位;ceil返回的类型仍然是float,因为float值的范围通常比integer要大
根据邮件的重量和蒜头君是否选择加急计算邮费。计算规则:重量在 1000克以内(包括 1000克),基本费 8 元。
超过 1000克的部分,每 500克加收超重费 4 元,不足 500 克部分按 500 克计算;
如果蒜头君选择加急,多收 5 元。
输入格式
输入一行,包含一个正整数和一个字符,以一个空格分开,分别表示重量(单位为克,不超过 2⋅1052cdot 10^52⋅105)和是否加急。
如果字符是'y'
,说明选择加急;如果字符是'n'
,说明不加急。
#include <stdio.h> #include <math.h> int main(){ int n,x; char ji; scanf("%d %c",&n,&ji); if(ji == 'y'){ if(n < 1000){ printf("13"); }else{ x = (int) ceil((double) (n-1000)/500); printf("%d", 13+ x * 4); } }else{ if(n < 1000){ printf("8"); }else{ x = (int) ceil((double) (n-1000)/500); printf("%d", 8+ x * 4); } } return 0; }
蒜头君买了一箱 n 个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每 x 小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过 y小时你还有多少个完整的苹果?
C语言
#include <stdio.h> #include <math.h> int main(){ int n,x,y; int eat =0; scanf("%d %d %d",&n,&x,&y); if(y % x >0){ eat = 1 + (y / x); }else{ eat = y / x; } if(eat >= n){ printf("0"); }else if(eat < n){ printf("%d",n - eat); } return 0; }
c++
#include <iostream> #include <cmath> using namespace std; int main () { long long n; long double x, y; cin >> n >> x >> y; if (floor(n - y / x) <= 0) { cout << 0; return 0; } cout << floor(n - y / x); return 0; }