C语言学习记录——BC45 小乐乐改数字

小乐乐改数字_牛客题霸_牛客网 (nowcoder.com)

#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,用数组做了半天,但题目要求是输出转换为整数

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾浩轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值