每日一题——小乐乐改数字

题目来源于牛客网

描述

小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐修改后得到的数字。

示例1

输入:

222222

输出:

0

示例2

输入:

123

输出:

101

思路解析:

首先我们输入一个整数,然后要将整数的偶数位转换成0,奇数位变成1;那么自然而然就涉及到取数转换,接下来博主就为大家分享两种解题思路。

第一种是用数组做,优势是取数、修改数据容易,缺点是程序笨重,通用性不好,需要根据实例,做出相应的调整。

第二种是造数,通过取数,然后根据题目要求,生成一个新的数,直到输入的整数的每一项都进行了取数为止,新数制造完成。非常的好用。

造数法:

#include<stdio.h>
int main()
{
    int a=0;//整数a
    int k=0;//存储每一位的位数
    int sum=0;//造数
    scanf("%d",&a);
    //定义一个i用来控制每一位的数据大小,例如:123=1*100+2*10+3*1;
    //循环结束条件为整数a的每一位都取到过;
    //i*=10,相当于i=i*10;因为是造数,所以要控制好每一位的大小
    for(int i=1;a!=0;i*=10)
    {
        //与10求模即可的得出最后一位
        k=a%10;
        //判断该位的奇偶
        if(k%2==0)
        {
            k=0;//如果是偶数,那么这一位为0
            sum+=k;
        }
        else
        {
            k=1;//如果是奇数,那么这一位为1
            sum+=k*i;//通过乘i来调整位数的大小,通过sum存储
        }
        //除以10,概数去掉最后一位,从而可以判断下一位
        a=a/10;
    }
      //打印制造的数sum
      printf("%d",sum);
    return 0;
}

数组法:

#include<stdio.h>
int main()
{
    int i = 0, j = 0;
    int t[16] = { 0 };
    int n;
    float sum = 0;
    scanf("%d",&n);                 
    while (n)
    {
        //判断奇偶,以及相应的处理方式
        if (n % 2 == 0||n==0)
        { 
            t[i] = 0;
            sum += t[i];
        }
        else
        {
            t[i] = 1;
            sum += t[i];
        }
        ++i;
        n = n / 10;
    }
 
    //数据每一位都一样(相同)的情况
    if (sum /( i +1)== t[0])
        printf("%d", t[0]);
    //数据开头为0,我们则输出非0以后的数据
    else if (t[i] == 0)
    {
        for (j = i; j >=0; j--)
        {
            if (t[j] % 2 != 0)
                while (j >=0)
                {
                    printf("%d", t[j]);
                    j--;
                }
        }
    }
    //打印转换后的数据
    else
        while (i>=0)
        {
            printf("%d",t[i]);
            --i;
        }
    return 0;
}

题目来源于牛客网:

小乐乐改数字_牛客题霸_牛客网

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ  

 

 如有侵权请联系修改删除!

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

保护小周ღ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值