我必须编写一个递归函数(不使用向量或字符串)来反转数字并返回它。例如,如果我输入35,它应该返回53.我的代码是(它不起作用):
int reverse( int number )
{
if( number < 10 )
return number;
number = fmod(number,10);
return reverse( number );
}
如果我输入35,例如,这段代码只给我5 ... 3?
会发生什么答案 0 :(得分:2)
你不能指望一个递归函数接受一个int并返回一个int并使最后一个数字成为第一个可以成功地反转一个数字。让我们想象f
做到了,看看resp 1234和4123会发生什么。
如果你向右转,f(1234)应该返回f(4123),这是无意义的,因为我们知道它们将具有不同的值。如果你转向,以免f(4123)应该返回f(1234)表现出同样的问题。
这意味着递归函数应该至少有2个参数,而更简单的是number_to_convert, number_converted_so_far
,因为现在当转换的数字没有更多的数字时,你有一个正确的停止点。
在你的代码中,问题是在第一次递归之后,你的号码只有一个数字(最后一个),所以其他所有数字都不可避免地丢失了。
答案 1 :(得分:1)
这是正确的功能。
int fun(int a)
{
if(a<10)
return a;
int no=0,b=a;
while(b)
{
no++;
b/=10;
}
int l=a%10;
return l*pow(10,no-1)+fun(a/10);
}
答案 2 :(得分:1)
您是否可以使用log10
等数学库函数?
#include <math.h>
int reverse(int number) {
if (number == 0) {
return number;
}
return (number % 10) * pow(10, floor(log10(number))) + reverse(number / 10);
}