Podnoszenie do potęgi z przedziału (0-19) bez funkcji do potęgowania

0

witam mam napisać program który będzie podnosił liczbę dziesięć do wpisanej przez użytkownika potęgi z przedziału 0-19. Nie mogę jednak użyć funkcji potęgi oraz mam do wykorzystania jeden zestaw nawiasów klamrowych i 1 funkcję printf. Niestety mam problem z ułożeniem odpowiedniej instrukcji liczącej potęgę.

#include <stdio.h>
 
int main(void) {
  int n, k;
  k=10;
  scanf("%d" , &n);
  while(k<=(n+10) && n>0 && n<20){
    k=k*k;
  }
  printf("wynik: %d " , k);
  return 0;
}
1

A nie wystarczy jedną pętlą dopisać odpowiednią liczbę zer?

edit: Nie wiem co w poleceniu oznacza "jeden zestaw nawiasów klamrowych", ale chyba nie liczymy tych od funkcji main()? ;)
edit2: Po drugie da się przecież umieścić w pętli jedną instrukcję i w ten sposób uniknąć stosowania nawiasów klamrowych :P Uwielbiam wybujałe pomysły twórców takich zadanek.

0

Tylko jaką formułą w pętli dopisywać te zera?

1

Jeśli mówimy o języku C, a musisz użyć printf() tylko raz, to proponuję strcat()

0

no normalnie printuj '0' bez przechodzenia do nowej linii

0

Tu chyba chodzi o obwarowanie, że może użyć tylko jednego bloku {} poza main.
Natomiast co do wzoru na potęgę to utwórz sobie zmienne:

int powerFromUser, result = 1, powerBase = 10;

wzór z kolei wygląda bardzo prosto

result = result * powerBase;

musisz go powtórzyć odpowiednią ilość razy.
Ach, i na upartego idzie się obyć bez nawiasów klamrowych poza tymi od main()

4

kompaktowe rozwiazanie:

main(n){scanf("%d",&n);putchar(49);while(n--)putchar(48);}

https://ideone.com/Pb9hUV

0

Tak jak Bartosz36 powiedział, przy 1 instrukcji nie musisz robić klamer do pętli

	int potega;
	int wynik = 1;

	std::cin >> potega;

	if (potega >= 0 && potega < 20)
	{
		for (int i = 0; i < potega; i++)
			wynik *= 10;
	}
	printf("Wynik: %d", wynik);
  • Funkcji brak
  • jedna para klamer
  • jeden printf
0

dzięki wielkie za pomoc

3
Adam2213 napisał(a):

mam do wykorzystania jeden zestaw nawiasów klamrowych i 1 funkcję printf.

Jak widzę takie ograniczenia na zadanie z podstaw programowania to mi się płakać chce. Czego niby ma nauczyć takie ograniczenie?
"Zgadnij jak to zrobił prowadzący"?

1

Gdyby to było zadanie dla już bardziej zaawansowanych programistów to bym się raczej nie dziwił, ale początkujący często w ogóle nie wiedzą jak coś zrobić, a co dopiero żeby znali kilka alternatyw (nierzadko wręcz hacków).

0

No to głupota i wyobraź sobie że to jest działowo na każdy tydzień rozdzielone, jak nie zdążysz to karne punkty.

0

:WcaleNieUżywamNawiasówKlamrowych

a ++;

if(a<liczba)goto Wcalejprd;

jakbyś chciał zrobić pętle bez używania klamerek xD w sumie nie widzę żadnego problemu w napisaniu programu w forze xD

for( tutaj kod twojego programu :D )

a tak bardziej poważnie to

for(;;)a*=a;

czy jakoś tak nie pamiętam... czekej zaraz sie pobawie xD i zedytuje posta :D

//Edit:
#include <iostream>

int main()
{int a;
std::cin>>a;
for(int i=a-1;i--;)a*=a;
std::cout<<a;
}

masz coś mniej więcej takiego xD tylko popraw sobie jeszcze błędy bo działa tylko dla 2 3 xDDDD
lel ;c... kiedyś chyba tak to jakoś działało... no ja teraz je jakimiś jensykami dla biedoty nie muszę bawić więc pozapominałem xD

Dla 2 i 3 działa !

możesz zrobić tak jak ja kiedyś ochujałem nauczyciela xD

switch(liczba)

a potem około 30 kejsów na wypadek jakby wpisał jakieś większe liczby xD
mieliśmy jakiś tam program kiedyś do zrobienia którego nie ogarniałem jak napisać
to sam obliczyłem 30 najbliższych wyników i podałem od razu

prawdę mówiąc częstą praktyką którą kiedyś używałem do potęg to było właśnie użycie switcha

case 2: aa
case 3: a
aa
case 4: a
aaa
case 5: aaaaa
case 6: aaaaa*a

teraz sobie przypomniałem że for programm... 4programmers kasuje znaki mnożenia więc się musita domyślić co napisałem ;<

0

A co mi tam, masz pełen kod jaki testowałem

#include <iostream>
using namespace std;

int main()
{
    uint power;
    int powerBase = 10;
    int result = 1;
    
    cout << "Enter power:";
    cin >>  power;//nie ma ograniczenia do maksymalnej potęgi 19.Zrób to sam ;]
    
    for (uint cnt = 0; cnt < power; cnt++)
    {
        result = result * powerBase;
    }
    
    cout << "10 ^ " << power << " = " << result;

    return 0;
}
1

Rozwiązanie klasy lookup ? ;)

Deklarujesz raz:

...
const char * powers[]={ "1","10", ....  }; 
...

A później tylko po odczytanym indeksie: powers[0], powers[19]

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