Algorithm 如何在没有外部存储的情况下将整数中的所有零向右放置

Algorithm 如何在没有外部存储的情况下将整数中的所有零向右放置,algorithm,math,Algorithm,Math,如何将整数中的所有零向右移位 例如,int x=560106,移位后x=561600 我们不能使用另一个变量,字符串操作不是一个好的答案 此外,我确实知道根据整数长度递归使用mod的肮脏方法。我不确定这是否是您的解决方案,但递归实现是(很抱歉使用Scheme-我涉猎过它,所以我尝试使用它进行实践): EDIT2:Python实现可能更容易遵循: def bubble_digit_up(num, digit): if num == 0: return digit

如何将整数中的所有零向右移位

例如,int x=560106,移位后x=561600

我们不能使用另一个变量,字符串操作不是一个好的答案


此外,我确实知道根据整数长度递归使用mod的肮脏方法。

我不确定这是否是您的解决方案,但递归实现是(很抱歉使用Scheme-我涉猎过它,所以我尝试使用它进行实践):


EDIT2:Python实现可能更容易遵循:

def bubble_digit_up(num, digit):
    if num == 0:
        return digit
    else:
        if num%10 == 0:
            return 10*bubble_digit_up(num/10, digit)
        else:
            return 10*num + digit

def shift_zeros_right(x):
    if x <= 0:
        return 0
    else:
        return bubble_digit_up(shift_zeros_right(x/10), x%10)
def bubble\u digit\u up(num,digit):
如果num==0:
返回数字
其他:
如果num%10==0:
返回10*气泡数字(数字/10,数字)
其他:
返回10*num+位
def移位零点向右(x):

如果x显然(?)它不能作为“位操作”来完成,因为中的问题是以10的幂来提出的。我很确定你需要递归或者其他变量来保持你目前正在处理的10的幂。我可能错了,我想对于一个已知大小的
int
你无论如何都可以展开这个循环。@Steve:如前所述,我们不能有另一个变量。对于长度未知的整数,我有一个解决方案,并且递归地使用mod。但这是一种肮脏的方法。必须有一个更简单的方法。你能扩展到“不能使用另一个变量”吗?你是说我们的程序中唯一允许的声明是'int main()'和'int x'?@Rob:我们不能存储任何新信息,比如你是否要存储零的位置或整数的长度。此外,这是一个脑筋急转弯,所以我们更担心的是逻辑,而不是程序。但是回答你的问题,是的。只有main()和int x。不要让我们悬而未决,发布你的答案。终于有人开始给出答案,而不是增加/减少人的声誉…让我看看这个…谢谢…不用担心。和他一起工作很有趣。:)另一种可能的解决方案是
删除零位(num)*(10**count\u zero\u digits(num))
,这两个函数也可以递归编码。我猜这个问题的目的是看看你是否能做递归函数——因为这是一个隐藏变量用法的明显方法是的,目的是找到一种有效的方法来获得答案,即所有的零在右边,其余的在左边。
(define (bubble-digit-up number digit)
  (if (= number 0)
      digit
    (if (= (modulo number 10) 0)
        (* (bubble-digit-up (/ number 10) digit) 10)
      (+ (* number 10) digit))))

(define (shift-zeros x)
  (if (<= x 0)
      0
    (bubble-digit-up 
     (shift-zeros (/ (- x (modulo x 10)) 10))
     (modulo x 10))))
def bubble_digit_up(num, digit):
    if num == 0:
        return digit
    else:
        if num%10 == 0:
            return 10*bubble_digit_up(num/10, digit)
        else:
            return 10*num + digit

def shift_zeros_right(x):
    if x <= 0:
        return 0
    else:
        return bubble_digit_up(shift_zeros_right(x/10), x%10)