bartinio07 Temat założony przez niniejszego użytkownika |
Duże liczby » 2017-06-14 16:53:33 Witam, mam problem z następującym 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 ≤ 101000). Możliwe znaki porównania to: ==, !=, <, >, <= lub >=. 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. Przykład Dla danych wejściowych: 1000000000000000000000000000000 < 1000000000000000000000000000001 poprawnym wynikiem jest: TAK natomiast dla danych wejściowych: 999 >= 20000 poprawnym wynikiem jest: NIE Napisałem już coś takiego: #include <iostream> #include <string> using namespace std; int main() { string a, b, znak; cin >> a >> znak >> b; if( a.length() > b.length() && znak == ">" || znak == ">=" || znak == "!=" ) cout << "TAK"; else if( a.length() < b.length() && znak == "<" || znak == "<=" || znak == "!=" ) cout << "TAK"; else cout << "NIE"; if( a.length() == b.length() ) { int c = a.length(), d = b.length(); for( int i = 0; i <= c; i++ ) { for( int j = 0; j <= d; j++ ) { if( a[ i ] > b[ j ] && znak == ">" || znak == ">=" || znak == "!=" ) cout << "TAK"; break; if( a[ i ] < b[ j ] && znak == "<" || znak == "<=" || znak == "!=" ) cout << "TAK"; break; if( a[ i ] == b[ j ] && znak == "==" ) cout << "TAK"; else cout << "NIE"; } } } return 0; }
Program jednak nie działa do końca poprawnie. Mógłby ktoś podpowiedzieć, co trzeba w nim zmienić/dodać, żeby było ok? |
|
Luq |
» 2017-06-14 18:18:37 Na pierwszy rzut oka brakuje Ci nawiasów w ifach if( a.length() > b.length() &&( znak == ">" || znak == ">=" || znak == "!=" ) ) |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-06-14 18:25:00 Dopisałem nawiasy, ale nadal podaje złe wyniki. |
|
mateczek |
» 2017-06-14 18:50:07 |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-06-14 19:44:53 ? |
|
michal11 |
» 2017-06-14 20:46:14 Bez sensu jest ten podwójny for, przecież jeżeli masz dwie liczby które mają tyle samo znaków to wystarczy sprawdzić która liczba ma większą pierwszą od lewej cyfrę, jeżeli są równe to wtedy drugą od lewej itd. jeżeli doszedłeś do końca to znaczy, że liczby są równe. Skoro liczby mają taką samą długość to wystarczy jeden for. |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-06-14 21:05:42 Podpowiedziałbyś, jak to zapisać w jednej pętli? |
|
mateczek |
» 2017-06-14 21:28:28 Zobacz taki kod i pobaw się w ten sposób #include <iostream> #include<string> using namespace std; int main() { string a = "1212", b = "2213", znak = ">"; int diff = a.size() - b.size(); if( diff < 0 ) { a.insert( a.begin(), - diff, '0' ); } else if( diff > 0 ) { b.insert( b.begin(), diff, '0' ); } if(( znak == "==" || znak == ">=" || znak == "<=" ) &&( a == b ) ) { cout << "TAK" << endl; } else if(( znak == ">" || znak == ">=" ) &&( a > b ) ) { cout << "TAK" << endl; } else if(( znak == "<" || znak == "<=" ) &&( a < b ) ) { cout << "TAK" << endl; } else cout << "NIE" << endl; }
|
|
« 1 » 2 3 |