【c++笔记】有关计算时间的操作?!(新手速进)

发布时间:2024年01月15日

? ? ? ?今天主要是向大家介绍c++有关计算时间的两个函数以及输出技巧,运用函数的方法似乎更加简便高效,希望对您有所帮助。

目录

一、内容简介

二、正文部分

2-1?ceil与floor函数的介绍

1.ceil函数

?2、floor函数

?2-2 %-2d,%02d等的意义

三、例题?

四、结语?


一、内容简介

①ceil与floor的函数介绍+常用输出技巧

②有关时间计算的两个问题

二、正文部分

2-1?ceil与floor函数的介绍

1.ceil函数

|①向上取整数

ceil函数可以对小数进行向上取整操作,只需将要取整的小数作为ceil函数的入参即可,如:

#include <bits/stdc++.h>
using namespace std;
int main(){
    double num = 3.1;
    int n=ceil(num);
    printf("向上取整后得到的结果为:%d", n);
}

结果为

?|②向上取整小数位数

对于小数,ceil函数的用途更加广泛,它不仅可以将小数向上取整到整数位,还可以将小数的某一位向上取整,如下面的代码所示:

#include <bits/stdc++.h>
using namespace std;
void main(){
    double num = 3.1415926;
    printf("向上取整后得到的结果为:%f", ceil(num*100)/100.0);
}

结果为:

|③?向上取整特殊边界值?

在进行向上取整操作时,有时会遇到特殊的边界值,在处理这些值时需要特殊考虑:

向上取整零值

当要取整的值为零时,结果仍为零,因为它已经是整数了

#include <bits/stdc++.h>
using namespace std;
void main(){
    double num = 0;
    printf("向上取整后得到的结果为:%f", ceil(num));
}

向上取整正负零值

当要取整的数值为正零或负零时,它们被视为相同的数值,结果仍为零。

#include <bits/stdc++.h>
using namespace std;
void main(){
    double num1 = 0;
    double num2 = -0.0;
    printf("num1和num2向上取整后的值分别为:%f, %f", ceil(num1), ceil(num2));
}

向上取整无限大值

当要取整的值为正无穷大时,结果也为正无穷大;当要取整的值为负无穷大时,结果为负无穷大。

#include <stdio.h>
#include <math.h>
void main(){
    double num1 = INFINITY;
    double num2 = -INFINITY;
    printf("num1和num2向上取整后的值分别为:%f, %f", ceil(num1), ceil(num2));
}

?2、floor函数

|①?取整

floor?函数主要用于对实数进行取整。对于一个实数?x,
floor()的计算方法是将x向下取整到最近的整数。例如:f1oor?(2.3)=?2,£1oor(3.9)=3,f100r(-2.3)=-3e

|②辗转相除法

辗转相除法(又称欧几里德算法)是求两个数的最大公约数的一种方法,它使用到了 floor?函数。辗转相除法的基本思想是:将较大的数除以较小的数得到余数,然后再用较小的数去除以余数,直到余数为止。此时,较小的数即为原来两个数的最大公约数。?

|③求商和余数

在进行除法计算时,通常需要求商和余数。对于两个非零整数a 和b,我们可以通过如下方法求它们的商和余数:

?q= floor(a/ r)

r=?a?-?bq

例如:
如果a=7,b=3,那么q= floor(7/3)=2,r=7-2*3=1。??

?2-2 %-2d,%02d等的意义

以下代码你都能准确说出他们所代表的意义吗?

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a=1;
	printf("%d\n",a);
	printf("%.2d\n",a);
    printf("%02d\n",a);
	printf("%-2d\n",a);
	return 0;	
} 

结果如下:

意义如下:

|①%.2d和%02d

2代表宽度,这两者的意义相同,指的是若不满足宽度则往前面补0

?|②%-2d

2代表宽度,此时表示不满足宽度时往后面补0

三、例题?

代码如下:

#include <bits/stdc++.h>
using namespace std;
int a1=24*60;//至少不超过一天,所以这里设置a1是提前一天的时间,a2是表示第二天8点 
int a2=8*60;
int main()
{
	int s,v;
	cin>>s>>v;
	int t=ceil((1.0*s)/v);//向上取最大整数 
	t+=10;//丢垃圾的10分钟 
	if(t<=a2)
	{
		a2=a2-t;
		printf("%02d:%02d",a2/60,a2%60);
	}
	else{
		a1=a1+a2-t;
		printf("%02d:%02d",a1/60,a1%60);
	}
	return 0;
}

四、结语?

本次文章主要介绍了如何巧妙地用函数简单的解决时间问题,是值得c++入门选手参考的做题方式,希望对您有所帮助,如果有更好见解,欢迎来私信或者评论区进行讨论

希望能帮到您,蟹蟹~我们下次见~┏(^0^)┛


?

文章来源:https://blog.csdn.net/2301_79982543/article/details/135557300
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。