繁体   English   中英

位置数字总和(基于位置的两个数字的总和)

[英]Position Digits Sum (Sum of digits in two numbers based on their position)

我在网站上处理一个练习问题,并陷入了困境。

问题是:

位置数字总和

程序必须接受两个正整数作为输入,然后打印它们的单位位数和十分位数的总和。

输入格式:第一行将包含A和B,并用空格分隔。

输出格式:第一行将包含单位数字和第十位数字的总和,以空格隔开。

边界条件:1 <= A,B <= 9999999

输入/输出示例1:输入:23 49

输出:12 6

输入/输出示例2:输入:12456 687

输出:13 13 10 2 1

好吧,我解决了这个问题,但是在6个测试用例(隐藏的)中,有5个通过了案例,有1个没有通过。

这是我的代码:

a,b = input().split()
assert 1<=len(a)<=7 and 1<=len(b)<=7
assert a.isdigit() == True and b.isdigit() == True
if len(a)>1 and len(b)>1:
    assert a[0] != '0' and b[0] != '0'
h = []
m = []
def pp(a,b):
    c = []
    for i in range(1,len(a)+1):
        x = int(a[-i])+int(b[-i])
        c.append(x)
    return c
if len(a)==len(b):
    g = pp(a,b)
    y = [str(i) for i in g]
    for i in range(0,len(y)-1):
        y[0] = y[0]+' '+y[1]
        y.remove(y[1])
    print(y[0])
if len(a)>len(b):
    d = abs(len(a)-len(b))
    for i in range(0,d):
        h.append(a[i])
        r = a.replace(a[0:d],'')
    p = pp(r,b)
    p = p+h[::-1]
    t = [str(i) for i in p]
    for i in range(0,len(t)-1):
        t[0] = t[0]+' '+t[1]
        t.remove(t[1])
    print(t[0])
if len(a)<len(b):
    d = abs(len(a)-len(b))
    for i in range(0,d):
        m.append(b[i])
        u = b.replace(b[0:d],'')
    q = pp(a,u)
    q = q + m[::-1]
    e = [str(i) for i in q]
    for i in range(0,len(e)-1):
        e[0] = e[0]+' '+e[1]
        e.remove(e[1])
    print(e[0])

我是一个初学者,所以我只使用了简单的python代码,这使它太长了。 我检查了一下,但没弄明白有什么问题。 有什么帮助吗?

它可以在非常简单的使用方式来完成itertools.zip_longest()在Python 3.X(相当于itertools.izip_longest()在Python 2.7)为:

>>> from itertools import zip_longest
>>> a = 123
>>> b = 67891

>>> [sum(map(int, x))for x in zip_longest(str(a)[::-1], str(b)[::-1], fillvalue=0)]
[4, 11, 9, 7, 6]

说明:在上面的列表理解表达式中,逐步显示中间结果:

  1. 型铸造intstr ,以使它们可迭代。 颠倒这两个可迭代对象,以便可以正确的10幂并行地进行迭代(在下一步中需要)。

     >>> str(a)[::-1] '321' 
  2. 然后将它们与zip_longest一起使用,以并行地迭代两个可迭代对象。 例如:

     >>> list(zip_longest(str(a)[::-1], str(b)[::-1], fillvalue=0)) [('3', '1'), ('2', '9'), ('1', '8'), (0, '7'), (0, '6')] 
  3. 使用map ,将上述子列表中的每个字符串值类型转换为int是:

     >>> list(map(int, ('3', '1'))) [3, 1] 
  4. 然后,使用sum ,在上面的列表中添加值:

     >>> sum([3, 1]) 4 

我没有深入分析您的代码,但其中包含无效的结构,如下所示:

for i in range(0,len(y)-1):
    y[0] = y[0]+' '+y[1]
    y.remove(y[1])

例如,在这里您要在对其进行迭代的同时更改y

我,我将拆分,然后首先计算最长的整数,将其填充为零值,然后将数字交织在一起(但从末尾开始,因此取反操作)求和,然后转换回字符串以通过join

import itertools

s = "12456 687"

numbers = s.split()
max_digit = max(len(x) for x in numbers)
numbers = [x.zfill(max_digit) for x in numbers]

# at this point: numbers = ['12456', '00687']

v = " ".join(reversed([str(int(a)+int(b)) for a,b in zip(*numbers)]))
print(v)

结果:

13 13 10 2 1

导入java.util。*;

公共类你好{公共静态void main(String [] args)

{

//您的代码在这里

Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int d1,d2,digit;
while(a>0 || b>0)
{
    d1 = a%10;
    d2 = b%10;
    digit = d1+d2;
    a = a/10;
    b = b/10;
    System.out.print(digit + " ");
}

}

}

这是位置数字总和的正确代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM