偶数位置数字的乘积之和

-5 投票
5 回答
2676 浏览
提问于 2025-04-19 00:31

我尝试过这样解决这个问题:

a = input("Enter number : ") 
s = 3
w = 1 
while a>0: 
 digit=a%10
 if n%2 == 0:
     p = p*digit 
 else: 
     s = s+digit 
     a=a/10
 n=n+1 

print "The sum is",s 

对于偶数位的数字,这个方法运行得很好,但对于奇数位的数字,比如234,它的和是6,乘积是3。

5 个回答

0

你需要从 n = 0 开始,这样才能让它正常工作。

a = int(input("Enter number"))
s = 0 
p = 1
n = 0
while a>0: 
    digit=a%10
    if n%2 == 0:
        p *= digit
    else: 
        s += digit
    a /= 10
    n += 1 

print "The sum is",s 
print "Product is",p 
0

这是数学版的内容:

n = input('Enter a number: ')
digits = []

while n > 0:
    digits.append(n%10)
    n //= 10

s = 0
p = 1
i = 0
for digit in reversed(digits):
    if i%2 == 0:
        s += digit
    else:
        p *= digit
    i += 1

print 'Sum of even digits:', s
print 'Product of odd digits:', p
print 'Answer:', s+p

我尽量把这个解释得简单易懂。


下面是一个实现相同功能的函数:

def foo(n):
    s = 0
    p = 1
    for i, digit in enumerate(str(n)):
        if i%2 == 0:
            s += digit
        else:
            p *= digit
    return s+p
0
def foo(num):
    lst = [int(digit) for digit in str(num)]
    mul, add = 1, 0
    for idx, val in enumerate(lst):
        if not idx % 2:
            mul *= val
        else:
            add += val
    return add, mul

然后使用它:

>>> foo(1234)
(6, 3)
>>> foo(234)
(3, 8)

这个函数可以接收一个整数或者一个表示整数的字符串,然后把它分割成一个整数的列表。接着,它会用 enumerate 来遍历这个列表,并执行需要的操作。最后,它会返回一个包含两个元素的元组。

0

关于编号,很多人容易犯错。任何字符串、列表或数组的第一个元素的索引总是从0开始。例如,如果你用for循环遍历一个列表的元素,记得在使用len(list)返回的值时要减去1。

for x in range(len(list)-1):
   #your code using list[x]
3

没有明确的循环:

import operator
from functools import reduce # in Python 3 reduce is part of functools

a = input("Enter number : ") 
lst = [int(digit) for digit in a]

add = sum(lst[1::2])
mul = reduce(operator.mul, lst[::2],1)

print("add =",add,"mul =",mul,"result =",add+mul)

产生:

Enter number : 234
add = 3 mul = 8 result = 11

撰写回答