我找到了这段代码
#include <stdio.h>
#include <math.h>
int rev(int num)
{
if(num < 10)
return num;
else
return (num % 10) * pow(10, (int)log10(num)) + rev(num/10);
}
int main(void)
{
printf("%d\n", rev(12345));
return 0;
}
我开始分析它,但现在我有一个怀疑是以下,根据我的理解,回到起点,用(num%10)获得什么值是(1,2,3,4,5),但在尝试手动计算时,我没有得到预期值。
如果有人向我解释这个,或者我错过了什么,这里会发生什么?
答案 0 :(得分:4)
int rev(int num) // num = 12345
{
if(num < 10) // false
return num;
else
return (num % 10) * pow(10, (int)log10(num)) + rev(num/10);
// (12345 % 10) * 10 ^ (log 12345) + rev(12345/10);
// 5 * 10 ^ (4) + rev (1234)
// 50000 + rev(1234)
}
基于此,我们可以假设:
rev(12345) = 50000 + rev(1234)
rev(1234) = 4000 + rev(123)
rev(123) = 300 + rev(12)
rev(12) = 20 + rev(1)
rev(1) = 1
所以,最终的结果是:
rev(12345) = 50000 + 4000 + 300 + 20 + 1 = 54321
这是一个简单的数学,唯一不重要的规则是(int)log10(num)
,但@QuestionC在他的评论中对此进行了解释。