SPOJ ADDREV Проблема - PullRequest
       0

SPOJ ADDREV Проблема

3 голосов
/ 07 сентября 2010

Я прошел через другие темы по этой 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

Обновление : Ребята, я получилответ на С .Спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 07 сентября 2010
  • С Python я думаю, что вы получаете ошибку времени выполнения, потому что вы вызываете ограниченный ввод функции, больше ничего не приходит на ум.
  • В C вы получаете WA, потому что входные целые числа могут быть очень большими, и вы переполнены.
  • Для JAVA есть две потенциальные проблемы, которые могут у вас возникнуть. Во-первых, вы используете класс Scanner, который может не поддерживаться SPOJ (по соображениям безопасности или по другим причинам). Во-вторых, я думаю, что имя вашего класса должно быть Главным. Пожалуйста, ищите SPOJ форум для более подробной информации по этому вопросу.
1 голос
/ 07 сентября 2010

Прежде чем вы начнете использовать какой-либо сервис, как правило, стоит прочитать его 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 ++.

0 голосов
/ 22 июня 2018

Попробуйте это решение в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...