• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie SPOJ, Zabawne dodawanie Piotrusia

0 głosów
699 wizyt
pytanie zadane 10 września 2017 w SPOJ przez Józef Niecierski Początkujący (440 p.)

Witam, SPOJ nie chce mi zaakceptować mojego rozwiązania zadania (http://pl.spoj.com/problems/BFN1/)ze znanego mi powodu, mianowicie. To podesłane niżej jest jego roboczą wersją, tzn. ma pomocnicze cout-y. Na początku mamy liczbę testów, pętle z każdym, wczytanie liczby, wyznaczenie jej cyfr, zapisanie liczby przestawionej - i tu jest ów problem. Dla liczb dwucyfrowych przestawiona liczba jest poprawna, lecz dla liczb 4-cyfrowych rząd jedności jest wyznaczany błędnie - o 1 mniej, choć przy błędnych cyfrach liczba jest obliczona poprawnie (tyle że jest zła, ze względu na złe wyznaczenie cyfr). Zaś dla liczb 3-cyfrowych cyfry wyznaczone są dobrze, ale szwankuje obliczenie liczby przestawionej (po to dodałem linie 45-47, żeby to zaobserwować). O liczbach 5+-cyfrowych nie wspomnę. Nie wiem dlaczego przy 3-cyfrowych, źle się sumuje- o 1 za mało (pierwsze "po zsumowaniu"), a dlaczego przy 4-cyfrowych, błędnie jest ostatnia cyfra wyznaczana - o 1 za mała. Prosiłbym o pomoc. (Dorobiłem też toporną wersję, bo w zadaniu jest, że liczba nie większa od 80 i większość (poza 79-dopisałem ręcznie) wtedy działa (z dopisanym wyniki są dobre), ale przekraczam czas - mniejsza o to). Chodzi mi o te wyniki za małe o 1. Proszę o pomoc.

#include <iostream>
#include <cmath>
#include <cstdlib>
 
using namespace std;
 
int liczba, dlugosc, liczbap,k,t;
 
 
int main()
{
    cout<<"ile testow: ";
    cin>>t;
        for(int z=0;z<t;z++)
        {
        cout<<"Podaj liczbe do sprawdzenia ("<<z+1<<". test): ";
        cin>>liczba;
 
petla:
 
        cout<<endl<<"Sprawdzamy liczbe: "<<liczba<<endl;
 
int liczba2=0;
        liczbap=liczba;
        dlugosc=(int)log10(liczba)+1;
 
        system("PAUSE");
 
int cyfra[dlugosc];
 
            for(int i=0; i<dlugosc; i++)
            {
                if(i>0)  liczba=liczba-cyfra[i-1]*pow(10,dlugosc-i);
                if(i==0) cyfra[i]=floor(liczba/pow(10,dlugosc- i-1));
                else cyfra[i]=floor(liczba/pow(10,dlugosc- i-1));
 
            cout<<i+1<<". cyfra: "<<cyfra[i]<<endl;
 
            kp: ;
            }
 
cout<<endl;
            for(int i=0; i<dlugosc; i++)
            {
            cout<<endl<<i+1<<". rzad: "<<cyfra[dlugosc-i-1]*pow(10,dlugosc-i-1);
            liczba2+=cyfra[dlugosc-i-1]*pow(10,dlugosc-i-1);
            cout<<endl<<"Po zsumowaniu: "<<liczba2<<endl;
            }
 
        cout<<endl<<"Przestawiona liczba: "<<liczba2<<endl;
 
        if (liczbap==liczba2)
        {
        cout<<"Liczba jest palindromem!!!"<<endl<<endl<<endl;
        }
        else
        {
        cout<<"Liczba nie jest palindromem"<<endl<<endl<<endl;
        liczba=liczbap+liczba2;
        goto petla;
        }
 
 
        }
    return 0;
}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 357 wizyt
pytanie zadane 14 października 2017 w SPOJ przez michal12334 Obywatel (1,510 p.)
0 głosów
1 odpowiedź 906 wizyt
pytanie zadane 20 lipca 2018 w SPOJ przez Piotr Błaszczak Bywalec (2,890 p.)
0 głosów
1 odpowiedź 557 wizyt
pytanie zadane 23 sierpnia 2017 w SPOJ przez seba Dyskutant (8,900 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,326 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...