Witam, mam zadanie o następującej treści:
Napisz funkcję, która w sposób rekurencyjny, dokona konwersji liczby z systemu dziesiętnego na system ósemkowy. Wynik powinien być zapisany w zmiennej typu unsigned long long. Prototyp funkcji powinien wyglądać następująco:
unsigned long long decimal_to_octal(unsigned int number);
Napisz program, który pobierze liczbę zapisaną w systemie dziesiętnym i wypisze ją po konwersji w systemie ósemkowym.
- W przypadku wprowadzenia błędnych danych wyświetlić komunikat Incorrect input i niezwłocznie zakończyć działanie z kodem błędu 1.
Przykłady:
Podaj liczbe: 30⏎
36⏎
Podaj liczbe: 1802707⏎
6700723⏎
Podaj liczbe: KROZw⏎
Incorrect input⏎
Uwagi
- W programie nie wolno używać zmiennych globalnych.
- W programie nie wolno używać słowa kluczowego static.
- W programie nie wolno używać pętli.
- W programie nie wolno korzystać z biblioteki math.h
Program napisany przeze mnie wygląda tak :
#include <stdio.h>
unsigned long long decimal_to_octal(unsigned int number)
{
if (number == 0) return 0;
else
{
decimal_to_octal(number/8);
printf("%u", number%8);
return number%8;
}
}
int main(void) {
unsigned int number;
printf("Podaj liczbę: ");
int k=scanf("%u", &number);
if(k!=1) {
printf("Incorrect input");
return 1;
}
printf(" ");
decimal_to_octal(number);
return 0;
}
Teoretycznie program działa prawidłowo, natomiast zdaje sobie sprawę z tego, że funkcja nie do końca tak powinna wyglądać. System dante nie pozwala na używanie printf w funkcji. Nie mam pomysłu jak mogę zapamiętać obliczoną resztę w funkcji, a następnie wyświetlić ją od tyłu. Gdybym mogła używać pętli to zrobiłabym to na tablicach, jednak nie mam takiej możliwości. Byłabym bardzo wdzięczna za pomoc.