C语言刷题——————(2)
刷题网站:题库 - 蓝桥云课 (lanqiao.cn)
First Question:时间显示
题目描述
小蓝要和朋友合作开发一个时间显示的网站。
在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 19701970 年 11 月 11 日 00:00:0000:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入描述
输入一行包含一个整数,表示时间。
输出描述
输出时分秒表示的当前时间,格式形如 HH:MM:SS
,其中 HH
表示时,值为 00 到 2323,MM
表示分,值为 00 到 5959,SS
表示秒,值为 00 到 5959。时、分、秒 不足两位时补前导 00。
输入输出样例
示例 1
输入
46800999
输出
13:00:00
示例 2
输入
1618708103123
输出
01:08:23
评测用例规模与约定
对于所有评测用例,给定的时间为不超过 10^18 的正整数。
思路:先分别对应化成秒、分、时,再分别算有多少秒、分、时
Demo:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
long long int millisecond;
scanf("%lld", &millisecond);
millisecond /= 1000;//先化成秒
int second = millisecond % 60;//得到有多少秒
millisecond /= 60;//再化成分钟
int minute = millisecond % 60;//得到有多少分钟
millisecond /= 60;//最后化成小时
int hour = millisecond % 24;//得到有多少小时
printf("%02d:%02d:%02d", hour, minute, second);
return 0;
}
Second Question:特别的数求和
题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 n 中,所有这样的数的和是多少?
输入描述
输入一行包含一个整数 n(1≤n≤10^4)。
输出描述
输出一行,包含一个整数,表示满足条件的数的和。
输入输出样例
示例
输入
40
输出
574
思路:先将末尾为0和2、1、9的数字分开找,每一次找完,就/10,排除末尾数字,再找十位数字,就相当于先从个位开始,依次是十位、百位、千位……
Demo:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int num = 0;
int mid = 0;
scanf("%d", &num);
int sum = 0;
for (int i = 1; i <= num; i++)
{
mid = i;
while (mid > 0)
{
if (mid % 10 == 0 && mid / 10 != 0)//找是10的倍数的整数
{
sum = sum + i;
break;
}
if ((mid % 10 == 2) || (mid % 10 == 1) || (mid % 10 == 9))//用来找数字最后一位为2、1、9的数字
{
sum += i;
break;
}
mid = mid / 10;//相当于除去最后一个末尾数字
}
}
printf("%d\n",sum);
return 0;
}
枯木逢春犹再发,人无两度再少年。