在python

时间:2016-03-17 19:37:44

标签: python python-2.7

我正在解决SPOJ -ADDREV问题,问题是:

  
    

反转数字例如,1245变为5421,2314变为4132。

  
     

请注意,省略了所有前导零。这意味着如果   数字以零结束,零通过反转而丢失(例如1200   给出了21)   您的任务是添加两个反转的数字和输出   他们的逆转总和。

     

当然,结果并不是唯一的,因为任何   特定数字是几个数字的反转形式(例如21可以   在倒车之前是12,120或1200)。因此,我们必须假设没有   通过反转丢失零(例如假设原始数字是   12)。

     

输入

     

输入由N个案例(大约10000个)组成。第一行   输入中只包含正整数N.然后按照这些情况进行操作。   每个案例由恰好一行和两个正整数组成   由空间隔开。这些是您要添加的反转数字。

     

输出

     

对于每种情况,只打印一行只包含一个整数 -   两个反转数字的反向和。省略任何前导零   输出。

     

实施例

示例输入:

3
24 1
4358 754
305 794

Sample output:

34
1998
1

我的代码是:

ctr=0
up=raw_input()
tocal=raw_input()
while ctr!=int(up):
    l=tocal.split(' ')
    num1=int(str(l[0])[::-1])
    num2=int(str(l[1])[::-1])
    while num1%10 ==0 or num2%10==0:
        if num1%10==0:
            num1=num1[:-1]
        elif num2%10==0:
            num2=num2[:-1]


    sum=int(num1)+int(num2)

    rsum=int(str(sum)[::-1])

    print rsum
    ctr+=1
    tocal=raw_input()

在SPOJ中进行测试时返回运行时错误,并在ideone中显示

Traceback (most recent call last):
File "prog.py", line 2, in <module>
EOFError: EOF when reading a line

我在我的电脑上检查了我的代码并且结果是正确的我不知道这里发生了什么(我是SPOJ的新手,可能不知道为这类网站编写代码的方法),不像herehere我还没有在raw_input()内编写任何代码然后发生了什么?

此外,我的代码比期望的呼叫运行1次(即raw_input()呼叫)我还没有找到任何方法来修复它。

4 个答案:

答案 0 :(得分:2)

我认为这可以简单得多:

public TypeExp Prune(TypeExp typeExp){
    TypeExp r = new VarType();
    if (r.instance == null) {
        return r;
    }
    else {
        r.instance = Prune(r.instance);
        return r.instance;
    }
}

核心:

n1 = 754
n2 = 4358
print int(str(int(str(n1)[::-1]) + int(str(n2)[::-1]))[::-1])

你必须做2x,每个整数一次,然后求和,然后转换为字符串,反向,然后返回int。

&#39; int&#39;函数将自动删除前导零

答案 1 :(得分:0)

需要一个函数来完成一个整数的所有工作:

input = """\
3
24 1
4358 754
305 794
"""

def rev(s):     ## s is an integer
    return int(''.join(list(str(s))[::-1]))

print [ rev(sum(map(rev, x.split()))) if len(x.split()) == 2 else '' for x in input.splitlines() ]

Output:

['', 34, 1998, 1]

答案 2 :(得分:0)

这是一个班轮:

>>> s='4358 754'
>>> int(str(reduce(lambda x,y: x+y, map(int, [e[::-1] for e in s.split()])))[::-1])
1998

答案 3 :(得分:0)

t = int(input()) #Taking number of test cases
if (t > 0): #If test cases are greater than zero
    for _ in range(t): #for all numbers in range of test cases
        n1, n2 = map(int, input().split()) #taking two input numbers in a single line
        print (int(str(int(str(n1)[::-1]) + int(str(n2)[::-1]))[::-1]))
                #convert integer to string, reverse string, convert string to integer and print the sum of these two integers.