【问题标题】:C recursion - increase each digit of a number by 1 except digit number 9 which will be 0 [closed]C递归-将数字的每个数字加1,但数字9除外,它将为0 [关闭]
【发布时间】:2020-04-11 21:06:09
【问题描述】:

我已经设法创建了一个函数,它将每个数字的数字 (0-8) 返回 1。

示例: 输入:3 输出:4

输入:345 输出:456

但我无法找到需要返回 0 的数字 9 的解决方案。

示例: 输入:9 输出:0

输入:945 输出:56

输入:99 输出:0

输入:19 输出:20

注意: 不要专门检查数字是否为9

我的代码:

int new_num(int num){
    int dig = num%10;
    num = num/10;

    if( num==0 ){
        return dig+1;
    }
    int res = new_num(num);
    dig +=1;
    res *=10;
    res +=dig;
    return res;   
}

谢谢。

【问题讨论】:

  • 这能回答你的问题吗? Extracting individual digits from a long in C
  • 没有。我不需要检查数量是否在增加等。而且,我还没有看到任何可以帮助我的解决方案。
  • 19 的输出应该是什么?
  • 输出应该是2
  • 对不起。我误解了 。 19 的输出应该是 20 。只有当数字 9 出现在数字的左侧时,我们才需要忽略它。关于为什么我不能特别检查数字 9 是因为它是学校作业,这是顺序。

标签: c function recursion numbers digits


【解决方案1】:

你来了。

#include <stdio.h>

int new_num( int n )
{
    const int Base = 10;

    return ( n % Base + 1 ) % Base +
           ( n / Base == 0 ? 0
                             : Base * new_num( n / Base ) );
}

int main(void) 
{
    printf( "%d -> %d\n", 99, new_num( 99 ) );
    printf( "%d -> %d\n", 945, new_num( 945 ) );
    printf( "%d -> %d\n", 19, new_num( 19 ) );
    printf( "%d -> %d\n", 123456789, new_num( 123456789 ) );

    return 0;
}

程序输出是

99 -> 0
945 -> 56
19 -> 20
123456789 -> 234567890

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2014-03-05
    • 2021-12-07
    • 1970-01-01
    • 2013-03-20
    • 2021-01-21
    • 2016-02-07
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多