SPOJ ADDREV问题

时间:2010-09-07 18:46:54

标签: java python c

我确实通过了这个SPOJ问题的其他主题ADDREV添加反转的数字),但遗憾的是,我无法得到任何答案我编写的三个程序(C,Python和Java)。我附上了这三个代码片段。

的Python:

    def find_rev(a):
        d=0

        while(a>=1):
            d=d*10+a%10
            a=a/10
        return d

    n=input('enter a number')
    for i in range(int(n)):
        num1=input('enter the first number')
        num2=input('enter the second number')
        num=0
        num1=find_rev(int(num1))
        num2=find_rev(int(num2))

        num=num1+num2
        num=find_rev(num)

        print num

使用Python,我收到运行时错误。

对于C,我得到了错误的答案。

    #include<stdio.h>
    long rev(long);
    int main()
    {
        long int n;
        long int n1;
        long int n2;
        long int i=0;
        scanf("%ld",&n);
        //printf("%d",n);
        for (i=0;i<n;i++)
        {
            //printf("\n%d",i);
            //printf("\nenter the two numbers");
            scanf("%ld%ld",&n1,&n2);

            n = rev(rev(n1)+rev(n2));
            printf("%ld\n",n);
        }
        return 0;
    }

    long rev(long a)
    {
        long d=0;
        while(a>=1)
        {
            d = d*10+a%10;
            a = a/10;
        }
        return d;
    }

使用Java,我收到编译错误。

    import java.util.*;
    //import java.io.*;
    public class spoj_prob {

        public static void main(String args[])
        {
            long n=0;
            System.out.println("enter a number \n");
            Scanner in=new Scanner(System.in);
            n=in.nextLong();
            long n1=0;
            long n2=0;
            long sum=0;
            for (int i=0; i<n; i++)
            {
                System.out.println("enter two numbers \n ");
                 n1=in.nextLong();
                 n2=in.nextLong();
                n1=rev(n1);
                n2=rev(n2);
                System.out.println(n1);
                System.out.println(n2);
                 sum=rev(n1+n2);
                System.out.println(sum);

            }
        }

        static long rev(long a)
        {
            long d=0;
            while (a>=1)
            {
                d=d*10+a%10;
                a=a/10;
            }
            return d;

            }
        }
    }

当然,SPOJ法官报告了这些错误。程序在我的系统上运行良好。我使用的测试用例是:

    2

    999999999 11

    999 11

答案

    101
    101

另外

    3

    34 54

    123 091

    00034 00054

更新伙计们,我在C 中得到了答案。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

在开始使用任何服务之前,阅读FAQ通常是一件好事。它解释了程序应该如何接收数据。

请特别注意,将enter a number和其他垃圾打印到控制台将始终导致错误的答案。因为正确的程序会输出类似

的内容
34
1998
1

和你的

enter a number
enter two numbers
34
enter two numbers
1998
enter two numbers
1

我不知道为什么Java无法编译。您可能应该找到一些有关如何使用参考解决方案在Java中提交的信息。

此外,问题定义对输入数字没有限制,因此对于Java和C ++中的标准整数类型,它们可能太大了。

答案 1 :(得分:1)

  • 使用Python我认为你得到的是运行时错误,因为你正在调用一个受限制的函数输入,没有别的想法。
  • 在C中你得到了WA,因为输入整数可能非常大,而且你已经溢出了。
  • 对于JAVA,您可能遇到两个潜在问题。一个是您正在使用SPOJ可能不支持的Scanner类(出于安全性或其他考虑因素)。其次,我认为你的班级名称必须是主要的。请在SPOJ论坛上搜索更多详情。

答案 2 :(得分:0)

在Python 3中尝试此解决方案:

import sys
t = int(input())
i=0
while i<t:
  a,b = map(int,sys.stdin.readline().split())    #to take both inputs in single line
  c=str(a)                                       #converting the number into string
  d=str(b)
  e=int(c[::-1])                    #converting reverse of the string c to int
  f=int(d[::-1])                    #converting reverse of the string d to int
  s=e+f                             #adding the two reverse numbers
  s1=str(s)
  s2=int(s1[::-1])                  #reverse s and display it
  print(s2)                                                     
  i+=1