题目来源:
https://www.nowcoder.com/practice/fcd30aac9c4f4028b23919a0c649824d?tpId=107&&tqId=33397&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
描述
小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。
输入描述:
输入包含一个整数n (0 ≤ n ≤ 109)
输出描述:
输出一个整数,即小乐乐修改后得到的数字。
示例1
输入:
222222
输出:
0
示例2
输入:
123
输出:
101
完成代码:
#include
#include
int main()
{
int a = 0;
scanf("%d", &a);
int b = 0;//记录a的每一位数字
int sum = 0;
int i = 0;
while (a != 0)
{
//得到a的每一位
b = a % 10;
if (b % 2 == 1)
{
b = 1;
}
else
{
b = 0;
}
sum += b * pow(10, i++);
a /= 10;
}
printf("%d", sum);
return 0;
}
分析题目:
根据这三步走,我们就可以解决这个问题。
首先我们第一步:
这里我们用9999演示:
代码表示:
while (a != 0)
{
//得到a的每一位
b = a % 10;
a /= 10;
}
第二步:
对拿出的每一位进行转换,题目要求
判断一个数字是奇数还是偶数,我们只需要给这个数字模2,看是否等于0即可,等于0证明是偶数,不是0证明是1。同理如果模二等于1,证明这个数字是奇数,否则则是偶数。
在这里我选择使用后者吧:
代码实现:
//数字转换
if (b % 2 == 1)
{
b = 1;
}
else
{
b = 0;
}
最后一步:
整合输出,输出的方法用的是分步累加的方法,由于我们取数字的方法是从个位开始取,依次十位,百位,千位........因为我们最后得到的数字要处理的时候我们选择使用给每一位乘上这一位相对应的10的幂次方。
因此在这里我们调用了pow函数
代码实现:
sum += b * pow(10, i++);
我们再看一遍完整代码:
结果测试:
输入:
222222
输出:
0
输入:
123
输出:
101
最后我们通过提交测试牛客网也是可以过得去的
总结:
通过本题的练习,我对pow函数进行了复习巩固,也知道了如何将拿出来的每一位数字进行整合输出,这是最关键的。
有兴趣的小伙伴可以自己在电脑上练习练习哦~
(本篇完)