Napisz program w c++ używając (jeśli to możliwe) tylko tekstów char/string. Treść zadania:
Liczbą okrągłą nazwiemy każdą dodatnią liczbę całkowitą postaci x00...00, gdzie x jest dowolną cyfrą z zakresu od 1 do 9. Inaczej mówiąc, liczba jest okrągła, jeśli jest dodatnia i jeśli wszystkie jej cyfry poza najbardziej znaczącą są zerami. W szczególności wszystkie liczby od 1 do 9 są liczbami okrągłymi. Twoim zadaniem jest rozłożenie dowolnej liczby naturalnej k na sumę liczb okrągłych złożonej z minimalnej liczby składników.
Wejście W pierwszej linii wejścia znajduje się jedna liczba całkowita n (1 ¬ n ¬ 105), oznaczająca liczbę liczb do sprawdzenia. W n kolejnych liniach wejścia znajduje się po jednej licznie całkowitej ki (1 ¬ ki ¬ 1018).
Wyjście Na wyjściu w n liniach wypisz w kolejności malejącej rozkład liczby na sumę liczb okrągłych. Pamiętaj, o minimalnej liczbie składników sumy.
Przykład: dla danych wejściowych: 3 15 1003 999 poprawnym wynikiem jest: 10 5 1000 3 900 90 9
// Funkcja pomocnicza zwracająca liczbę cyfr w liczbie n
int count_digits(long long n) {
int count = 0;
while (n > 0) {
count++;
n /= 10;
}
return count;
}
// Funkcja zwracająca i wypisująca rozkład liczby n na sumę liczb okrągłych
void find_round_numbers(long long n) {
int digits = count_digits(n);
string s = to_string(n);
string result = "";
for (int i = 0; i < digits; i++) {
int digit = s[i] - '0';
if (digit > 0) {
string round_num = to_string(digit);
for (int j = 0; j < digits - i - 1; j++) {
round_num += "0";
}
result += round_num + " ";
}
}
cout << result << endl;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
long long k;
cin >> k;
find_round_numbers(k);
}
return 0;
}
Wyjaśnienie:
Program najpierw definiuje funkcję pomocniczą count_digits, która zwraca liczbę cyfr w liczbie całkowitej. Następnie definiujemy funkcję find_round_numbers, która przyjmuje liczbę n, znajduje i wypisuje rozkład liczby n na sumę liczb okrągłych. Funkcja ta działa w następujący sposób:
Obliczamy liczbę cyfr w liczbie n za pomocą funkcji count_digits.
Konwertujemy liczbę n na łańcuch znaków za pomocą funkcji to_string.
Iterujemy przez cyfry liczby n od najbardziej znaczącej do najmniej znaczącej. Dla każdej cyfry digit, która jest większa od zera, tworzymy liczbę okrągłą round_num poprzez dodanie odpowiedniej liczby zer na końcu (liczba zer jest równa liczbie cyfr liczby n minus indeks bieżącej cyfry minus jeden).
Dodajemy liczbę okrągłą round_num do wynikowego łańcucha znaków result, oddzielając ją spacją.
Wypisujemy wynikowy łańcuch znaków result.
W funkcji main wczytujemy liczbę testów n, a następnie iterujemy przez każdy test, wczytując liczbę k i wywołując funkcję find_round_numbers dla tej liczby.
1 votes Thanks 1
Miloooo2713718294723
Wszystko pięknie działa, tylko mam pytanie: czy mógłbyś przekształcić kod w ten sposób, że odpowiedzi otrzymam dopiero po wpisaniu wszystkich danych na wejściu? Czyli że nie po każdej danej, a dopiero po wszystkich, z góry dziękuję i pozdrawiam!
domiabcde38
Jeśli dobrze rozumiem o co chodzi musisz po prostu w jednym wejściu wpisać wszystkie dane ułożone właśnie tak: 3 15 1003 999 i wtedy na wyjściu masz odpowiedzi do wszystkich
Miloooo2713718294723
faktycznie, przepraszam za nieuważność i jeszcze raz dziękuję!
Odpowiedź:
#include <iostream>
#include <string>
using namespace std;
// Funkcja pomocnicza zwracająca liczbę cyfr w liczbie n
int count_digits(long long n) {
int count = 0;
while (n > 0) {
count++;
n /= 10;
}
return count;
}
// Funkcja zwracająca i wypisująca rozkład liczby n na sumę liczb okrągłych
void find_round_numbers(long long n) {
int digits = count_digits(n);
string s = to_string(n);
string result = "";
for (int i = 0; i < digits; i++) {
int digit = s[i] - '0';
if (digit > 0) {
string round_num = to_string(digit);
for (int j = 0; j < digits - i - 1; j++) {
round_num += "0";
}
result += round_num + " ";
}
}
cout << result << endl;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
long long k;
cin >> k;
find_round_numbers(k);
}
return 0;
}
Wyjaśnienie:
Program najpierw definiuje funkcję pomocniczą count_digits, która zwraca liczbę cyfr w liczbie całkowitej. Następnie definiujemy funkcję find_round_numbers, która przyjmuje liczbę n, znajduje i wypisuje rozkład liczby n na sumę liczb okrągłych. Funkcja ta działa w następujący sposób:
Obliczamy liczbę cyfr w liczbie n za pomocą funkcji count_digits.
Konwertujemy liczbę n na łańcuch znaków za pomocą funkcji to_string.
Iterujemy przez cyfry liczby n od najbardziej znaczącej do najmniej znaczącej. Dla każdej cyfry digit, która jest większa od zera, tworzymy liczbę okrągłą round_num poprzez dodanie odpowiedniej liczby zer na końcu (liczba zer jest równa liczbie cyfr liczby n minus indeks bieżącej cyfry minus jeden).
Dodajemy liczbę okrągłą round_num do wynikowego łańcucha znaków result, oddzielając ją spacją.
Wypisujemy wynikowy łańcuch znaków result.
W funkcji main wczytujemy liczbę testów n, a następnie iterujemy przez każdy test, wczytując liczbę k i wywołując funkcję find_round_numbers dla tej liczby.
3
15
1003
999
i wtedy na wyjściu masz odpowiedzi do wszystkich