这是我的第一个问题,我是初学者,代码是用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;
}
}
递归,最简单的方法是:
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。为了获得下一个数字而不检查,您只需要使用MOD运算符%进行环绕即可。因此,a = (num % 10 + 1) % 10
或更简单的a = (num + 1) % 10
由Michael指出
看来您是说以下
为00
的输入打印99
的版本>
int swap(int num) {
return num/10 ?
swap(num/10)*10 + ((num % 10 + 1)%10) :
(num % 10 + 1) % 10;
}