2021-04-30


c++基础训练(五)

感觉这几道题目中规中矩

(1)给定一个浮点数,要求得到该浮点数的个位数。

输入:一行,包括一个浮点数。例如:13.141

输出:一行,包含一个整数,为输入浮点数对应的个位数。例如:3

#include<bits/stdc++.h>
using namespace std;
int main(){
	double a=0;
	cin>>a;
	cout<<(int)a%10<<endl;
}

这个题基本没啥难度,仔细一想其实就是对一个数先变成他的整数型(直接用int就行),然后求余呗,题目要求输出各位,那就对10求余。

(2) 问题:一年约有3.156×107s,要求输入您的年龄,显示该年龄合多少秒。

输入:一行,包括一个整数age(0<age<=200)。例如:20

输出:一行,包含一个整数,输出年龄对应的秒数。例如:631200000

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long age=0;
	cin>>age;
	cout<<age*31560000<<endl;
	return 0;
}

这个题目本来也没啥难度,就是乘法,但是一定要注意范围,20年是九位数字,200年就是十位数字,这个要注意好long与longlong的范围界限,我第一次做就是定义称为了long类型,结果数值超出范围,报错了


类型名称          字节数      取值范围
signed char        1         -2^7 ~ 2^7-1    -128~+127
 
short int          2         -2^14 ~ 2^14-1  -32768~+32767
 
int                4         -2^31 ~ 2^31-1  -2147483648~+2147483647
unsigned int       4         0 ~ 2^32-1      0 ~ 4294967295
 
long int           4         -2^31 ~ 2^31-1  -2147483648~+2141483647   (同int)
unsigned long      4         0 ~ 2^32-1      0~4294967295
 
long long int      8         -2^63 ~ 2^63-1  -9223372036854775808~+9223372036854775807
unsigned long long 8         0 ~ 2^64-1      18446744073709551615
 
 
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

这里我引用一位前辈博文里的范围表(原文链接:https://blog.csdn.net/qq_28584889/article/details/83501771)

(3)给定秒数seconds (0< seconds < 100,000,000),把秒转化成小时、分钟和秒。

输入:一行,包括一个整数,即给定的秒数。例如:3661

输出:一行,包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开。例如:1 1 1

#include<bits/stdc++.h>
using namespace std;
int main(){
	int hour,mintue,second,seconds=0;
	cin>>seconds;
	if(seconds>=3600){
		hour=seconds/3600;
		int j=seconds%3600;
		mintue=j/60;
		second=j%60;
		cout<<hour<<" "<<mintue<<" "<<second<<endl;
	}
	else if(seconds>=60||seconds<3600){
		mintue=seconds/60;
		second=seconds%60;
		cout<<hour<<" "<<mintue<<" "<<second<<endl;
	}
	else{
		cout<<hour<<" "<<mintue<<" "<<seconds<<endl;
	}
	return 0;
}

大致思路就是先看输入的秒数是否大于3600秒,大于就除以3600得到小时数,然后用输入秒数求余得到余数去除以60,然后求余60,分别得到分钟和秒数。如果一开始没大于3600,我们再来看是否大于60,然后用同样的思想得到分钟和秒数,最后一种就是小于60秒的情况,直接输出。当然代码还可以这样写

#include <bits/stdc++.h>
using namespace std;
int main (){
    int n;
    cin>>n;
    cout<<n/3600<<" "<<(n-3600*(n/3600))/60<<" "<<n-60*(n/60);
    return 0;
}

差不多一看就明白了,这样可以少设置好几个变量。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值