【问题标题】:Python: find the exponent of two numbers using only incrementation/addition by 1(+=1), can not use multiplication or division operators.Python:仅使用 1(+=1) 的增量/加法来查找两个数字的指数,不能使用乘法或除法运算符。
【发布时间】:2016-07-03 10:20:48
【问题描述】:

我正在尝试使用增量“+=1”乘以 1 的唯一算术运算来查找两个数字 (n,m) 的指数。我做不到使用任何其他加法/乘法或除法运算符。该程序可以是一个函数或一个循环,这样用户输入 n,然后他们输入 m,程序计算 n 的幂

有一个与我已经发布的问题密切相关的问题但是它正在寻找一个奇数编号的正方形并且允许加法运算符.相关问题并不能帮助我将 n 的值提高 m 的值。这是我到目前为止的代码,它会根据用户输入相乘但不会平方。提前致谢!

n=int(input())
m=int(input())

i=0
acc=0
while i < m:
    acc+=n
    i+=1
print(acc)

【问题讨论】:

    标签: python function while-loop increment square


    【解决方案1】:

    函数式编程在这里工作得很好。加法是重复递增的。乘法是重复加法。幂是重复乘法。

    通过定义一个函数 (repeat) 将函数重复应用于参数给定的次数,我们可以构建 power 函数。

    这是代码。

    def repeat(f, n, x):
        a = 0
        while a != n:
            x = f(x)
            a = a + 1
        return x
    
    inc = lambda a: a+1
    add = lambda a: lambda b: repeat(inc, a, b)
    mult = lambda a: lambda b: repeat(add(a), b, 0)
    power = lambda a: lambda b: repeat(mult(a), b, 1)
    
    print power(3)(7)
    

    执行的唯一内置算术是在repeat 函数中的while 循环中递增1 和相等比较。

    【讨论】:

    • Paul,感谢您的代码,它运行良好!但我不确定我是否可以使用 Lambda 函数。我是 python 新手,所以我会保留并使用它以供将来参考。
    • @TheodoreHarrison 您应该被允许使用lambda 函数,因为它只是定义函数的简写。阅读更多here
    • MoonCheesez,是的,你是对的。经过一番研究,Lambda 是一种更简单、更短的定义函数的方法。感谢您的链接和@PaulHankin 的解决方案。
    【解决方案2】:

    要做到这一点,我们首先要了解:什么是乘法?

    a x b 等价于a + a + a +... b 次。那么,什么是指数呢? a^b 相当于 a x a x a x.. b 次。因此,您需要两个 while 循环和两个计数器。

    n = int(input("n value: "))
    m = int(input("m value: "))
    
    def add(a, b):
        num = a
        for i in range(b):
            num += 1
        return num
    
    def multiply(a, b):
        num = 0
        for i in range(b):
            num = add(num, a)
        return num
    
    def exponent(a, b):
        num = 1
        for i in range(b):
            num = multiply(num, a)
        return num
    
    print(exponent(n, m))
    

    【讨论】:

    • 你应该改变循环计数逻辑,因为 op 不能使用“-=1”,但这是一个微不足道的修改,让它使用 +=1
    • num += a 也需要展开。
    • 感谢 Moon Cheesez,您提供的代码对我来说很容易理解,因为它与我目前正在编写的代码类型和级别相同。包含 Paul 和 @Lejot 的评论,您的代码正是我想要的。谢谢大家!
    【解决方案3】:

    仅将+= 1 用作算术运算,您的解决方案可能如下所示:

    def mul(n, m): 
        result = 0 
        mi = 0 
        while mi < m:
            ni = 0 
            while ni < n:
                result += 1
                ni += 1
            mi += 1
        return result
    
    def pow(n, e): 
        result = 1 
        ei = 0 
        while ei < e:
            result = mul(result, n)
        ei += 1
        return result
    
    if __name__ == '__main__':
        n = int(input())
        e = int(input())
        print(pow(n, e))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多