小乐乐改数字

31 阅读1分钟
描述

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

输入包含一个整数n (0 ≤ n ≤ 109)
输出描述:
输出一个整数,即小乐乐修改后得到的数字。
示例1
输入:

222222

输出:

0

示例2
输入:

123

输出:

101

本题思路:首先在做这道题的时候我的第一想法是纯粹用int记录这个数然后一个一个数字拆解出来进行改变,然而这一思路很快被我所否定,我想到如果要拆数字的话,那么使用数组会更好,而且是字符数组(可以用strlen直接求数组长度),详情请看代码~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include<stdio.h>
#include<string.h>
int main()
{
	char num[50],i,f=0;
	while((num[i]=getchar())!='\n')
	{
		i++;
	}
	num[i]='\0';		
	int len=strlen(num);
	for(i=0;i<len;i++)
	{
		if((num[i]-'0')%2==0)
		{
			num[i]='0';
		}
		else
		{
			num[i]='1';
		}
	}
	for(i=0;i<len;i++)
	{
		if(num[i]!='0')//如果不是0的话输出数字且继续前进 
		{
			++f;
		}
		if(f==0) // 如果是前导0的话跳过输出继续前进 
		continue;
		printf("%c",num[i]);
	}
	if(f==0)	//如果全为0的话直接输出一个0 
	printf("0");

	
	return 0;
}

这是一种解题方法,在看题解的时候我又发现了另外一种解法(某位不知名大佬写的)——————递归

#include <stdio.h>

int bian(long long n)
{
    int b = n%10;
    int c = b%2;
    n = n/10;
    if( n  )
    {
 
        return 10 * bian(n) +c;
    }
 
    return c;
}

int main()
{
    long long n = 0;
    scanf("%lld",&n);
    int a = bian(n);
    printf("%d",a);
    return 0;
}