通过递归反转整数顺序
Posted
技术标签:
【中文标题】通过递归反转整数顺序【英文标题】:Reverse Order Of Integer By Recursion 【发布时间】:2019-06-25 01:49:20 【问题描述】:“编写一个递归函数,获取一个整数作为输入(不以0开头)并以相反的顺序返回整数。
例如:58347 返回为 74385
指针、数组、内存分配是不允许的”
int reverse(int num);
我们必须知道整数的“长度”,可以不用全局变量吗?
也许是一些按位运算?
我的尝试:
int reverse(int num)
int temp;
if(num/10 == 0)
return num;
else
return num%10*10+reverse(num=/10)
【问题讨论】:
不需要长度。您所需要的只是简单的十进制整数算术(更具体地说,使用10
进行除法和取模)。
十进制表示,我们得到 1234 并返回 4321
为什么不试一试,贴一些代码,我们会帮你解决你发现的任何问题。
【参考方案1】:
(不以0开头)
鉴于提供的函数原型,我不确定问题在这里试图暗示什么。
我们必须知道整数的“长度”
不,不需要知道整数的长度。
可以不用全局变量吗?
是的,当然。你应该得到整数的单位(即最小值的数字,例如1234
中的4
),提取它(例如获取123
)并继续递归直到数字为0
。
也许是一些按位运算?
不,除法 (/
) 和模数 (%
)。
【讨论】:
但是我需要将反向数字作为整数返回,如何保存每个模后得到的“碎片”? 通常,您将递归编码为另一个函数(这样您就可以根据需要拥有尽可能多的参数来保存“片段”),并且原始函数将使用正确的初始设置调用该递归函数.【参考方案2】:我不会为你做作业,但我会给你一些提示:
n % 10
运算将为您提供以 10 为基数的整数表示中的最低有效位。
使用整数除法,循环中的条件n /= 10
最终将始终为假 (0
),并将数字的基数为 10 表示中的最低有效位更改为第二个最低有效位.
将累加器变量乘以 10 将为另一个数字创建“空间”。
【讨论】:
3 是我在“我们必须知道整数的“长度””中的意思 @gbox 不,我写的都没有暗示你需要事先知道整数的长度。 能否请您详细说明 3,好的,我看到我们计算了对函数的调用次数 你从你想要反转的 int 中得到下一个数字。您将其存储在(最终)返回值中。要将此数字添加到数字中,请先将其乘以 10,然后再添加新数字。 所以如果我们有 123,我们得到 30,然后是 20,然后是 1以上是关于通过递归反转整数顺序的主要内容,如果未能解决你的问题,请参考以下文章