Witam wszystkich,
mam problem z programemhttps://pl.spoj.com/problems/JLITOSL/, mianowicie chciałbym żeby program nie wyświetlał niepotrzebnych skrótów tj. tys., mln., mld., bln. w przypadku gdy ich nie ma tzn. jeżeli liczba, to: dziewięć mld. wtedy nie potrzebuje dopisku mln. tys. Zapisałem w programie przykładowy warunek dla jakiego mam problem. Podpowiedzcie proszę jak ewentualnie ugryźć problem.
ps. Ify napisałem w celu uniknięcia pojawiania się powyższego błędu dla pełnych bln. mld etc, natomiast przy dalszym testowaniu zauważyłem, że problem dalej się pojawia.
#include <iostream>
#include <map>
using namespace std;
string convertNumberIntoWord (long long number) {
map <int, string> numberToWord;
numberToWord [0] = "";
numberToWord [1] = "jeden";
numberToWord [2] = "dwa";
numberToWord [3] = "trzy";
numberToWord [4] = "cztery";
numberToWord [5] = "piec";
numberToWord [6] = "szesc";
numberToWord [7] = "siedem";
numberToWord [8] = "osiem";
numberToWord [9] = "dziewiec";
numberToWord [10] = "dziesiec";
numberToWord [11] = "jedenascie";
numberToWord [12] = "dwanascie";
numberToWord [13] = "trzynascie";
numberToWord [14] = "czternascie";
numberToWord [15] = "pietnascie";
numberToWord [16] = "szesnascie";
numberToWord [17] = "siedemnascie";
numberToWord [18] = "osiemnascie";
numberToWord [19] = "dziewietnascie";
numberToWord [20] = "dwadziescia";
numberToWord [30] = "trzydziesci";
numberToWord [40] = "czterdziesci";
numberToWord [50] = "piecdziesiat";
numberToWord [60] = "szescdziesiat";
numberToWord [70] = "siedemdziesiat";
numberToWord [80] = "osiemdziesiat";
numberToWord [90] = "dziewiecdziesiat";
numberToWord [100] = "sto";
numberToWord [200] = "dwiescie";
numberToWord [300] = "trzysta";
numberToWord [400] = "czterysta";
numberToWord [500] = "piecset";
numberToWord [600] = "szescset";
numberToWord [700] = "siedemset";
numberToWord [800] = "osiemset";
numberToWord [900] = "dziewiecset";
string word;
map <int,string>::iterator itr = numberToWord.find(number);
if (itr != numberToWord.end()) {
return word = itr->second;
}
if ((number >= 20) && (number < 100)) {
return convertNumberIntoWord((number / 10)*10) + " " + convertNumberIntoWord(number % 10);
}
if ((number >= 100) && (number < 1000)) {
return convertNumberIntoWord((number / 100)*100) + " " + convertNumberIntoWord(number % 100);
}
if((number >= 1000)&& (number < 1000000)) {
int tmp =(number/1000) % 1000;
return convertNumberIntoWord(tmp) + " tys. " + convertNumberIntoWord(number % 1000);
}
if((number >= 1000000) && (number < 1000000000)) {
int tmp = number / 1000000 % 1000;
int tmp1 = number / 1000 % 1000;
int tmp2 = number % 1000;
return convertNumberIntoWord(tmp) + " mln. " + convertNumberIntoWord(tmp1) + " tys. " + convertNumberIntoWord(tmp2);
}
if((number >= 1000000000) && (number < 1000000000000)) {
int tmp0 = number/1000000000 % 1000;
int tmp = number / 1000000 % 1000;
int tmp1 = number / 1000 % 1000;
int tmp2 = number % 1000;
return convertNumberIntoWord(tmp0) + " mld. " + convertNumberIntoWord(tmp) + " mln. " + convertNumberIntoWord(tmp1) + " tys. "+ convertNumberIntoWord(tmp2);
}
if((number >= 1000000000000) && (number < 10000000000000)) {
int tmp3 = number/1000000000000 % 1000;
int tmp0 = number/1000000000 % 1000;
int tmp = number / 1000000 % 1000;
int tmp1 = number / 1000 % 1000;
int tmp2 = number % 1000;
return convertNumberIntoWord(tmp3) + " bln. " + convertNumberIntoWord(tmp0) + " mld. " + convertNumberIntoWord(tmp) + " mln. " + convertNumberIntoWord(tmp1) + " tys. "+ convertNumberIntoWord(tmp2);
}
}
int main() {
long long number = 9000000000000, tests=1;
//cin >>tests;
while (tests--) {
//cin >> number;
if (number == 1000000) {
cout<< "mln. " <<endl;
}
else if (number == 1000000000) {
cout<< "mld. " <<endl;
}
else if (number == 1000000000000) {
cout<< "bln. " <<endl;
} else
cout << convertNumberIntoWord (number) <<endl;
}
return 0;
}
```C++
Borek1948