Witam! Za zadanie mam wczytać liczbę w zakresie od 0 do 2^64-1, następnie zamienić na postać dwójkową, odwrócić kolejność np. 110 na 011 i tą odwróconą liczbę w systemie dwójkowym zamienić na liczbę w systemie dziesiętnym. Zrobiłem taki programik, lecz raz: przekracza limit czasowy, dwa: podobno wyskakują błędne odpowiedzi :O Czy ktoś mógłby pomóc mi znaleźć szybszy sposób na wykonanie tego zadania? I ewentualnie powiedzieć co jest źle już w tym istniejącym :D
Pozdrawiam
#include <stdio.h>
int potega(int j);
int main(void){
char nap[64];
int i,j;
unsigned long long x,wynik;
while(scanf("%llu",&x)!=EOF){
for(i=0;i<64;i++){
if(x==0){
nap[i]='0';
break;
}
if(x%2==1)nap[i]='1';
else nap[i]='0';
x=x/2;
}
wynik=0;
for(j=0;i>=0;j++){
if(nap[j]=='1')wynik+=potega(i-1);
i--;
}
printf("%llu\n",wynik);
}
return 0;
}
int potega(int j){
if(j==0)return 1;
return 2*potega(j-1);
}