牛客网编程初学者入门训练3
BC20 kiki算数
描述
问题:KiKi今年5岁了,已经能够认识100以内的非负整数,并且并且能够进行 100 以内的非负整数的加法计算。不过,BoBo老师发现KiKi在进行大于等于100的正整数的计算时,规则如下:
- 只保留该数的最后两位,例如:对KiKi来说1234等价于34;
- 如果计算结果大于等于 100, 那么KIKI也仅保留计算结果的最后两位,如果此两位中十位为0,则只保留个位。
例如:45+80 = 25
要求给定非负整数 a和 b,模拟KiKi的运算规则计算出 a+b 的值。
数据范围:0 <= a,b <= 231 - 1
输入描述:
一行,输入两个非负整数a和b,用一个空格分隔。(0 <= a,b<= 2 31 -1)。
输出描述:
针对每组输入,输出按照KiKi的运算规则计算出 a+b 的值。
示例1:
输入:
45 80
输出:
25
内心想法:
题目看上去挺长的,但实则比较简单,但比较想吐槽的是描述规则有一点点误导,其实完全可以把规则 1 去掉,只保留规则 2 ,要不然可能第一想法是去用一些嵌套if语句来描述这两个规则,其实规则 2 就包含了所以情况嘛。所以我们思路就是保留结果的后两位,代码实现如下:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
int sum = a + b;
cout<<sum % 100 / 10 * 10 + sum % 10<<endl;
}
第 8 行cout语句中加号左边是十位数字,右边是个位数字,没什么好说的。要是误入嵌套if语句,怎么都要几十行吧······
BC21 浮点数的个位数字
描述
给定一个浮点数,要求得到该浮点数的个位数。
数据范围: 0 < n < = 200 0 < n <= 200 0<n<=200
输入描述:
一行,包括一个浮点数。
输出描述:
一行,包含一个整数,为输入浮点数对应的个位数。
示例1:
输入:
13.141
输出:
3
内心想法:
第一想法是让浮点数变成整型就好办了,于是合理猜测一波,转换方法类似于字符型和对应ASCII码的转换方法,代码实现如下:
#include<iostream>
using namespace std;
int main()
{
double a;
cin>>a;
cout<<(int)a % 10<<endl;
}
合理就是合理。
BC22 你能活多少秒
描述
问题:一年约有 3.156×107s,要求输入您的年龄,显示该年龄合多少秒。
数据范围: 0 < a g e < = 200 0 < age <= 200 0<age<=200
输入描述:
一行,包括一个整数age。
输出描述:
一行,包含一个整数,输出年龄对应的秒数。
示例1:
输入:
20
输出:
631200000
内心想法:
第一想法当然是把年数乘以秒数最简单,但看到数字这么大应该有点意识,int已经不够用了,所以要换成long int。代码实现如下:
#include<iostream>
using namespace std;
int main()
{
int age;
cin>>age;
long second = age * 31560000;
cout<<second<<endl;
}
BC28 大小写转换
描述
实现字母的大小写转换。多组输入输出。
输入描述:
多组输入,每一行输入大写字母。
输出描述:
针对每组输入输出对应的小写字母。
示例1:
输入:
A
B
输出:
a
b
备注:
多组输入过程中要注意“回车”也是字母,所以要“吸收”(getchar())掉该字母。
内心想法:
很明显思路就是ASCII码加32就可以转换成小写字母,问题是getchar()函数没用过,又是学新东西了······当然就这道题而言,逃避掉也是可以的,比如下面这种解法:
#include<iostream>
using namespace std;
int main()
{
char c;
while (cin >> c)
{
cout << char(c + 32) << endl;
}
}
如果要用getchar()的话,就是下面这种解法了:
#include <stdio.h>
int main()
{
char ch;
while((ch=getchar())!=EOF)
{
if(ch>='A'&&ch<='Z')
{
ch+=32;
}
putchar(ch);
}
}
if语句在这里没有应该也不会影响通过,毕竟这种题测试数据都比较水······
不过关于getchar()函数,这两篇博客说的很清楚,受益匪浅: