我确实浏览了其他线程SPOJ http://en.wikipedia.org/wiki/SPOJ问题,ADDREV https://www.spoj.pl/problems/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
Answer
101
101
Also
3
34 54
123 091
00034 00054
Update: 各位,我得到了C语言的答案。感谢您的所有帮助。