题解 | #小乐乐改数字#

小乐乐改数字

https://www.nowcoder.com/practice/fcd30aac9c4f4028b23919a0c649824d

#include<stdio.h>
#include<math.h>//因为用到了pow(a,b)次方函数
int main()
{
    int n,g,o=0,k=0;//定义n为输入整数,g代表每个数位上的数,o为输出整数,k为中间量
    scanf("%d",&n);//输入
    while(n!=0)
    {
        g=n%10;//取输入整数最后数位上的数
               //判断最后位上的数是奇数还是偶数,用%2取余是否等于0来判断
        g=g%2;//若为偶数,%2取余等于0,g=0;若为奇数,%2取余等于1,g=1;符合题目要求
        o=o+g*pow(10,k); //pow(10,k)表示10的k次方,大家和我一样自己推一下,我也是看大佬写的,我自己想不到这么妙的方法,但自己试着多推了几次,明白了是怎么回事儿,确实妙不可言
        k++;//k累加1
        n=n/10;//向左移,更新最后一位,因为每除10,都要进行保留整数部分,原先的最后一位会变成小数而被遗弃
    }
    printf("%d",o);//输出结果
    return 0;
}

总结:

如:n=123

进while循环判断条件(n!=0),此时n=123不等于0,进入循环

{

g=n%10;//此时g=3

g=g%2;//若为偶数,%2取余等于0,g=0;若为奇数,%2取余等于1,g=1;符合题目要求,此时g=1

o=o+g*pow(10,k);//o=0+1*10的0次方=1

k++;//k=0+1=1

n=n/10;//n=123/10=12.3但保留整数部分,n=12

}

再进while循环判断条件(n!=0),此时n=12不等于0,进入循环

{

g=n%10;//此时g=2

g=g%2;//若为偶数,%2取余等于0,g=0;若为奇数,%2取余等于1,g=1;符合题目要求,此时g=0

o=o+g*pow(10,k);//o=1+0*10的1次方=1

k++;//k=1+1=2

n=n/10;//n=12/10=1.2但保留整数部分,n=1

}

再进while循环判断条件(n!=0),此时n=1不等于0,进入循环

{

g=n%10;//此时g=1

g=g%2;//若为偶数,%2取余等于0,g=0;若为奇数,%2取余等于1,g=1;符合题目要求,此时g=1

o=o+g*pow(10,k);//o=1+1*10的2次方=101

k++;//k=2+1=3

n=n/10;//n=1/10=0.1但保留整数部分,n=0

}

再进while循环判断条件(n!=0),此时n等于0,不进入循环

printf("%d",o);//输出结果

反思:

我自己刚开始没理解好题意,认为是像221122,应该输出为001100,用数组做了半天,但题目要求是输出转换为整数

全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务