#include #include int main(void) { int i = 0; char sc[100], *scp = NULL; while(1) { int sn[sizeof sc]; if(i == sizeof sn / sizeof *sn) goto sizerr; if((sn[i] = getchar()) == EOF) { fprintf(stderr, "Ocorreu um erro!\n"); return -1; } if(sn[i] == ' ' && !scp) { if(!i) goto baserr; sc[i++] = '\0'; if(i == sizeof sn / sizeof *sn) goto sizerr; scp = &sc[i]; *scp = '\0'; continue; } else if(sn[i] == '\n') { if(!i) goto baserr; if(!scp || !*scp) { fprintf(stderr, "Logaritmando faltando!\n"); return -1; } sc[i] = '\0'; break; } if(!isdigit(sn[i])) { fprintf(stderr, "Não é número!\n"); return -1; } sc[i] = sn[i]; i++; } { unsigned int base = atoi(sc), log = atoi(scp), t = 0; unsigned long long res = 1; while(base) { if(base & 1) base /= 3, t++; else base /= 2, t++; } if(log != t) printf("Logaritmo incorreto!\n"); else printf("Logaritmo correto!\n"); printf("Base = %u\n" "Logaritmo = %u\n", base = atoi(sc), t); { int i = 0; while(t) { if(t & 1) { if(res * base > ((unsigned long long) -1) / res) { fprintf(stderr, "Logaritmando muito grande!\n"); return -1; } res *= base; } base *= base; t >>= 1; } } printf("Logaritmando = %llu\n", res); } return 0; sizerr: fprintf(stderr, "Há muitos caracteres!\n"); return -1; baserr: fprintf(stderr, "Base faltando!\n"); return -1; }