c - 在不使用数组的情况下交换给定数字的备用数字

标签 c algorithm

<分区>

在不使用数组的情况下交换给定数字的交替数字,例如:

 Input: 54687
Output: 45867

在不使用数组的情况下解决这个问题的正确算法是什么?我在一次面试中被问到这个问题,但仍然无法弄清楚正确的做法。

最佳答案

如果您不是数论学家,您可以通过检查这两个数字之间的差异来取得一些进展(如果我的人力资源部门坚持要我问候选人这个问题,我想这就是我对他们的期望去做)。如果你是一名数论学家,那么答案很快就会从你的脑海中蹦出来。它是,对于一个正数;

  1. 前两位数字在 1000 位(例如,a = 1000)。

  2. 前两位数字相差 -1(b = -1 说;注意符号约定)。

  3. 您需要将9 * a * b 添加到Input。即 -9000。交换前两位数字。然后我们继续:

  4. 接下来的两位数在 10 位 (a = 10)。

  5. 数字相差+2 (b = 2)

  6. 同样,您添加 9 * a * b,即 +180

一个强大的候选人会指出 Input 可能太大而不适合 int,这取决于您的平台。

请注意,您通过重复整数除以 10 直到达到 0 来获得最高有效数字的位置。

关于c - 在不使用数组的情况下交换给定数字的备用数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50701362/

相关文章:

c - C 数组中最长的递增序列

java - 寻找 2-3-4 树的最小值

c - 在 Linux 上,select() 如何确定何时可以无阻塞地写入 TCP/IP 连接?

c - 如何终止 Turbo C 中的无限循环?

在同一程序中组合 SDL 窗口和 GTK+ 窗口

c# - 实现非日期驱动的重复

c++ - 在递归下降解析器的递归算法中避免计算器溢出

android - 在 Android 中链接使用 CMake 编译的 C 库时出现问题。

c - 如何通过C程序向邮件提供用户名和密码?

algorithm - 如何在不使用内置函数的情况下计算数字的平方根?