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

Problem z porównywaniem dużych liczb w c++.

Object Storage Arubacloud
0 głosów
1,235 wizyt
pytanie zadane 9 kwietnia 2017 w C i C++ przez maciek259 Nowicjusz (240 p.)
edycja 9 kwietnia 2017 przez maciek259

Witam mam problem z zadaniem:

   Wiemy już, że każdy typ całkowity w języku C++ ma pewien ograniczony zakres. W tym zadaniu będziemy jednak operować na liczbach przekraczających zakresy wszystkich typów! Twoim zadaniem jest napisanie programu, który będzie porównywał takie bardzo duże liczby. Jak sobie z tym poradzisz?

Wejście

Wejście składa się tylko z jednego wiersza, zawierającego kolejno: liczbę naturalną a, odstęp, znaki porównania, odstęp i liczbę naturalną b (1 ≤ a, b ≤ 10^1000). Możliwe znaki porównania to: ==, !=, >, <, >=,<=.

Wyjście

Twój program powinien wypisać jedno słowo TAK lub NIE, oznaczające, czy nierówność podana na wejściu jest prawdziwa, czy fałszywa.

Po paru próbach i błędach skonstruowałem ten kod, ale nadal internetowa testerka znajduje 8 błędów na ok. 100 testów. Normalnie próbowałbym dalej metodą prób i błędów, ale jestem dość bliski limitu tych prób do zaliczenia kursu na mainie2. Byłbym naprawdę wdzięczny, gdyby ktoś przynajmniej napisał mi czy te błędy spowodowane są błędami w kodzie czy błędami w rozumowaniu.

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

bool rowne(string a, string b)
{
    if(a.length()==b.length()){
        for(int i=0;i<a.length();++i)
        {
            if(a[i]!= b[i])
            {
                return false;
            }
        }
        return true;
    }
    else if(a.size()!=b.size()){
        return false;}
}
bool mniejsze(string a, string b){
    int c,d;
if((a.length()<b.length()))
    {
        return true;
    }
    else if(a.length()==b.length()){
        for(int z=0;z<a.length();++z)
        {


            if(a[z]-'0'< b[z]-'0')
            {
                return true;
            }

        }
        return false;
    }
else if(a.length()>b.length())
    return false;
}
int main(){
string znak;
string a;
string b;
bool p=false;
cin>>a>>znak>>b;
int y=0;
int t=0;
while(a[0]=='0'&&a.length()!=1)
{
    a.erase(0,1);

}
while(b[0]=='0'&&b.length()!=1)
{
    b.erase(0,1);

}
if(znak=="=="){
    if(rowne(a,b)==true)
        p=true;
}
else if(znak=="!=")
{
    if(rowne(a,b)!=true)
        p=true;
}
else if(znak=="<"){
    if(mniejsze(a,b))
        p=true;
}
else if(znak==">")
{
    if(mniejsze(b,a))
        p=true;
}
else if(znak=="<="){
if(mniejsze(b,a)!=true)
    p=true;
}

else if(znak==">="){
if(mniejsze(a,b)==false)
    p=true;}

if(p==true)
    cout<<"TAK";
else if(p==false)
    cout<<"NIE";

return 0; }

 

komentarz 9 kwietnia 2017 przez RobertGardzinski Bywalec (2,460 p.)

Po paru próbach i błędach skonstruowałem ten kod, ale nadal internetowa testerka znajduje 8 błędów na ok. 100 testów.

Podaj namiary na internetową testerkę. Co to za błędy? Nie przechodzi 8 testcase'ów? 

komentarz 9 kwietnia 2017 przez maciek259 Nowicjusz (240 p.)
edycja 9 kwietnia 2017 przez maciek259

Ów testerka to https://main2.edu.pl/news/ z kursu wstęp do programowania, zadanie "Duże liczby". Jedyne co wiem o testerce to załączony screen.

komentarz 9 kwietnia 2017 przez RobertGardzinski Bywalec (2,460 p.)

To może dopisz w pierwszym ifie w mainie warunek

if(znak=="==" || znak=="=")

bo w poleceniu widzę, że mają być tylko trzy operatory porównania

komentarz 9 kwietnia 2017 przez maciek259 Nowicjusz (240 p.)
Aj, mój błąd, coś się nie skopiowało. Operatory to: ==, !=, >, <, >=,<=.

1 odpowiedź

0 głosów
odpowiedź 9 kwietnia 2017 przez mokrowski Mędrzec (155,460 p.)
komentarz 9 kwietnia 2017 przez maciek259 Nowicjusz (240 p.)
Spróbowałem, Funkcje porównawcze zaczerpnąłem pod ify i nadal mam 8 błędów(innych od poprzednich). Przekopiowanie całego kodu także nie działa.
1
komentarz 9 kwietnia 2017 przez mokrowski Mędrzec (155,460 p.)
A dokładnie skopiowałeś, ze zrozumieniem? :-)
komentarz 9 kwietnia 2017 przez maciek259 Nowicjusz (240 p.)
Jeśli chodzi o cały kod, to problemem było to, że kod działał tylko jeśli kompiler wspierał ISO C++ 2011 standard, testerka najwidoczniej nie wspiera. W sytuacji przekopiowania tylko instrukcji porównawczych to w argumentach tych funkcji dałem stringi, które zostają wpisane w bloku wejścia. Jeśli już coś miałoby być błędem to prawdopodobnie, te argumenty będące stringami do funkcji, która potrzebuje const stringów. Oczywiście zmieniłem wyjście, na odpowiadające mi "TAK" i "NIE". Jestem początkującym i elementy takie jak tuple, evaluator nie są mi znane i to mogło być moim błędem, lecz podejrzewam, że gdzieś indziej leży ów błąd.

Podobne pytania

0 głosów
3 odpowiedzi 2,864 wizyt
pytanie zadane 15 sierpnia 2016 w C i C++ przez Krzysiek Rojowski Obywatel (1,110 p.)
0 głosów
2 odpowiedzi 2,664 wizyt
pytanie zadane 30 października 2017 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 159 wizyt
pytanie zadane 30 sierpnia 2017 w Java przez LukasHardwares Początkujący (490 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...