Tworzenie zmiennych

0

Witam. Mam pewien problem i nie mogę go rozwiązać.

Zapis liczby P oraz dochodów mieszkańców zajmuje maksymalnie 1000 cyfr dziesiętnych, ponadto w zapisie liczb na wejściu nie występują nieznaczące zera (po lewej stronie).

W takim momencie mam problem ponieważ nie potrafię stworzyć takiego typu który ograniczy się jedynie do 1000 znaków. Ktoś mówił tak.

definiowałem swoją strukturę. cyfry trzymam w 1000 znakowej tablicy charów
tablica z inputu to tablica struktur.

Może ktoś pomóc mi coś takiego stworzyć i objaśnić jak mniej więcej mam tego używać. Kod musi być napisany w czystym c.

0

Nie ma takiego wbudowanego typu który pomieści taką liczbę.
Ale możesz to trzymać w tablice char:
char tb[1001]; // plus 1 na znak zakończenia napisu '\0'

0

Mam pełną świadomość i sam doszedłem do tego co napisałeś. Jednak jak na razie poziom moich umiejętności nie bardzo pozwala mi napisać tego w ten sposób aby jednym printf-em wczytać do tej tablicy całe wyrażenie np. "1234567890" tak aby tb[0]=1 a tb[4]=5 czyli każdy znak w innej komórce tablicy.

To ja może pokażę całe zadanie żeby było łatwiej zrozumieć o co mi chodzi.

Wejście

Na standardowym wejściu w pierwszych 3 liniach program otrzymuje:
w I linii wejścia: liczbę mieszkańców N (N ≤ 100),
w II linii wejścia: liczbę P,
w III linii wejścia: liczbę K (K ≤ 1000).
Liczby P i K określają stawkę podatku w ten sposób, że każdy musi zapłacić P10-K swojego dochodu (P10-K < 1). Na przykład jeśli P=123, a K=3, wtedy stawka podatku jest równa 0,123 (=12310-3), więc aby obliczyć podatek, należy od dochodu D odjąć 0,123D.

W następnych N liniach znajdują się dochody mieszkańców - każda kwota w oddzielnej linii. Zapis liczby P oraz dochodów mieszkańców zajmuje maksymalnie 1000 cyfr dziesiętnych, ponadto w zapisie liczb na wejściu nie występują nieznaczące zera (po lewej stronie). Wszystkie wyniki, w tym również pośrednie, są nieujemne.

Wyjście

Dla każdego mieszkańca należy wypisać w oddzielnej linii jego zarobek na czysto (zysk), czyli dochód po zapłaceniu podatku.

Przykład

Wejście

5
12
4
1000
10000000000000000000
90
0
462356734134963112195938737431869850079156421947107512411350302988000931945879857475406946284377851116
Wyjście

999
9988000000000000000
90
0
461801906054001156461303610946951606259061434240770983396456682624415330827544801646436457948836597695

0

Wiesz, mam bardzo duże doświadczenie w C/C++ ale moich umiejętności też nie wystarczy aby cokolwiek wczytać printf'em.
Ba jestem na 100% pewien że nie istnieje żaden programista który temu podoła.
;-P
Do tego należy użyć fgets().
Pamiętaj że wczytuje do bufora również <Enter>'a czyli '\n'

0

Właśnie nie do końca wiem jak mam to zrobić. Zmyliło mnie jak wczytać taką linijką z dużą liczbą jak jest w przykładzie do tego zadania.
//Miałem na myśli fscan a nie printf ale to pewnie też nic nie da ;)

1
char tb[1002];
fgets(tb,1002,stdin);
*strchr(tb,'\n')=0; /* właściwie należy sprawdzać czy znaleziono, ale skoro nie może być więcej niż 1000 znaków ... */
0

Właśnie o coś tego typu mi chodziło. Dzięki. Teraz możesz czuć się wielkim w moich oczach.

0

Zatem wiele osób może czuć się wielkimi ;]

0
hmm napisał(a)

Zatem wiele osób może czuć się wielkimi ;]

Niby czemu, nadal żaden z nas nie potrafi czegokolwiek wczytać printf'em

0

Oj odpuść sobie już z tym printfem. Ja dopiero się uczę.

0

printf'em może nie, ale cout'em już owszem ;-D

1 użytkowników online, w tym zalogowanych: 0, gości: 1