SPOJ ADDREV问题

我确实经历了这个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 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=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=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中得到了答案 。 谢谢你的帮助。

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

特别是,请注意打印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 ++中的标准整数类型,它们可能太大。

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

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

 import sys t = int(input()) i=0 while i