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

WZP09_2F - XV spoj, kod działa, spoj nie przyjmuje

Object Storage Arubacloud
+1 głos
527 wizyt
pytanie zadane 26 września 2019 w C i C++ przez Tedi Użytkownik (580 p.)

Tak jak w temacie. Nie mam pojęcia, dlaczego spoj nie przyjmuje tego rozwiązania.

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    unsigned long long liczba;
    while (cin>>liczba)
    {
        if (liczba==0)
        {
            exit(0);
        }
        else
        {
            if (liczba%15==0)
            {
                cout<<"TAK"<<endl;
            }
            else
            {
                cout<< "NIE"<<endl;
            }
        }
    }
    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 26 września 2019 przez mokrowski Mędrzec (155,460 p.)
wybrane 27 września 2019 przez Tedi
 
Najlepsza

Zwróć uwagę na cechy podzielności przez 15 (czyli cechy podzielności przez 3 i 5).
https://sciaga.pl/tekst/33241-34-cechy_podzielnosci_liczb
Podpowiedź: Cyfry tak długich liczb, wczytuj pojedynczo i sprawdź własność podzielności.

komentarz 26 września 2019 przez Tedi Użytkownik (580 p.)
czyli wczytać tę liczbę jako string. zrobić warunek, który sprawdzi czy ostatnia cyfra liczby (przekonwertowana na int) jest równa 0/5, jeśli sprawdzi sie warunek zrobić pętle, która w każdej iteracji pobierze pojedyńczy znak i przekonwertuje go na int i dodawać do sumy, sprawdzić, czy suma dzieli się przez 3, tak?
komentarz 26 września 2019 przez mokrowski Mędrzec (155,460 p.)
Możesz to zrobić tak jak opisałeś, lub nawet nie wczytywać całości liczby do pamięci tylko wczytywać pojedyncze znaki aż do napotkania zakończenia liczby. Przy 2 podejściu będziesz miał mniejszą konsumpcję pamięci (choć może nieco bardziej skomplikowany kod).

Przy wczytywaniu string'a, pamiętaj o wywołaniu .reserve(...) które alokuje miejsce na dane 1 raz a nie wiele razy w zależności od ilości danych.
komentarz 26 września 2019 przez Tedi Użytkownik (580 p.)
Okej, spróbuje najpierw pierwszą metodą, a potem zobaczę czy drugą ogarne
komentarz 27 września 2019 przez Tedi Użytkownik (580 p.)

@mokrowski,

Okej, zrobiłem coś takiego, tylko pytanie jak zastosować  .reserve() w tym kodzie, bo pierwszy raz sie z tym spotkałem.

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

int main()
{
    string liczba;
    while (cin>>liczba)
    {
        int dlugosc=liczba.length();
        int suma=0;
        if(dlugosc<2)
        {
            int liczba1=atoi(liczba.c_str());
            if (liczba1==0) exit(0);
            else cout<<"NIE"<<endl;
        }
        else
        {
            string nowaliczba=liczba.substr(dlugosc-1,1);
            int nowaliczba1=atoi(nowaliczba.c_str());
            if((nowaliczba1==0)||(nowaliczba1==5))
            {
                for (int i=0;i<dlugosc;i++)
                {
                    char x=liczba[i];
                    int cyfra=x-'0';
                    suma+=cyfra;
                }
                if (suma%3==0) cout<<"TAK"<<endl;
                else cout<<"NIE"<<endl;
            }
                else cout<<"NIE"<<endl;
        }

    }
    return 0;
}

 

komentarz 27 września 2019 przez mokrowski Mędrzec (155,460 p.)
int main()
{
    string liczba;
    liczba.reserve(1000);

Jeszcze oprócz tego można wiele poprawić w Twoim kodzie.

komentarz 27 września 2019 przez Tedi Użytkownik (580 p.)
Dobra, ogarniam, już wiem mniej więcej jak go skrócić, dzięki
+1 głos
odpowiedź 26 września 2019 przez adrian17 Ekspert (344,860 p.)

Każdy zestaw danych zawiera jedną liczbę całkowitą n (n >= 0) składającą się z nie więcej niż tysiąca cyfr.

Tysiąccyfrowa liczba nie zmieści się w unsigned long long ;)

Podobne pytania

0 głosów
1 odpowiedź 713 wizyt
pytanie zadane 24 sierpnia 2018 w SPOJ przez Piotr Błaszczak Bywalec (2,890 p.)
0 głosów
3 odpowiedzi 245 wizyt
pytanie zadane 15 lipca 2017 w C i C++ przez Kamil Paradowski Użytkownik (620 p.)
0 głosów
1 odpowiedź 270 wizyt
pytanie zadane 9 września 2019 w SPOJ przez Marcin Knapik Nowicjusz (240 p.)

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...