C-将9变成0

问题描述 投票:2回答:4

这是我的第一个问题,我是初学者,代码是用C(ANSI C)编写的。

代码应在递归函数中为每个数字返回数字(n + 1)。(123-> 234; 801-> 912; 239-> 340)

问题是,当数字9出现并且代码将其加1时,结果为10,并且必须变为0。有没有没有特别检查数字9的处理方法?

谢谢!

int swap(int num)
{
    int a,b;
    if (num/10==0)
        return num+1;
    else
    {
        a = num % 10;
        a++;
        b = swap(num / 10);
        return (b * 10) + a;
    }
}
c function recursion definition digits
4个回答
2
投票

递归,最简单的方法是:

unsigned swap (unsigned n) {
    if (n < 10) return ++n % 10;
    return 10 * swap(n/10) + swap(n%10);
}

此函数说的是:

  • 如果n小于10,则结果比其当前值大10,以10为模。因此,9将变成(10 mod >> 10),为0。
  • 否则,对最后一位和其余位递归地应用算法。这里的技巧是通过将原始数字除以10,然后将接收到的结果乘以10,获得其余的数字。

2
投票

为了获得下一个数字而不检查,您只需要使用MOD运算符%进行环绕即可。因此,a = (num % 10 + 1) % 10或更简单的a = (num + 1) % 10由Michael指出


2
投票

看来您是说以下


2
投票

00的输入打印99的版本>

int swap(int num) {
     return num/10 ?
        swap(num/10)*10 + ((num % 10 + 1)%10) :
        (num % 10 + 1) % 10;
}
© www.soinside.com 2019 - 2024. All rights reserved.