Problema "allocazione di memoria"

Ciao a tutti, ho tentato di risolvere il problema “allocazione di memoria” e su 28 testcase,20 sono corrette,però riesco ad ottenere solamente un punteggio di 10/100.In particolare ho dei problemi con le seconde subtask,nelle quali N è minore o uguale a 10,anche se provando tutti i numeri minori di 10,ottengo il risultato corretto al terminale.
Questo è il mio codice

#include <stdio.h>
#include <assert.h>
#include <math.h>
 
int alloca(int N) {
    // Mettete qui il codice della soluzione
    int esponente = 10;
    int i,j;
    int trovato = 0;
    int risultato;
    int risultati[100];
    int indice = 0;
    if (N >= 10000) {
        for (i = 100; i >= 2; i--) {
            for(j = esponente;j >= 2;j--) {
                printf("%ld\n", (long int)pow(i,j));
                if (((long int)pow(i,j)) <= N ) {
                    risultati[indice] = pow(i,j);
                    indice++;
                    printf("TROVATO");
 
                    break;
 
                }
            }
 
        }
    }
    else if (N >= 1000 && N <= 9999) {
        for (i = 50; i >= 0; i--) {
            for(j = esponente;j >= 2;j--) {
                printf("%ld\n", (long int)pow(i,j));
                if (((long  int)pow(i,j)) <= N ) {
                    risultati[indice] = pow(i,j);
                    indice++;
                    printf("TROVATO");
 
                    break;
 
                }
            }
 
        }
 
    }
    else {
        for (i = 25; i >= 2; i--) {
            for(j = esponente;j >= 2;j--) {
                printf("%ld\n", (long int)pow(i,j));
                if ((( long  int)pow(i,j)) <= N ) {
                    risultati[indice] = pow(i,j);
                    indice++;
                    printf("TROVATO");
 
 
                    break;
 
                }
            }
        }
 
    }
    risultato = risultati[0];
    for (i = 1; i<=indice-1; i++) {
        if (risultati[i] > risultato) risultato = risultati[i];
    }
 
       return risultato;
}
 
 
int main() {
    FILE *fr, *fw;
    int N, i;
 
    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(1 == fscanf(fr, "%d", &N));
    fprintf(fw, "%d\n", alloca(N));
    fclose(fr);
    fclose(fw);
    return 0;
}

( http://ideone.com/dPHnE3 )
Grazie in anticipo per l’aiuto.

Fai attenzione quando usi la funzione pow per calcolare potenze tra numeri interi, perché la funzione lavora con numeri in floating point. Vedi questa domanda sul sito stackoverflow.

In pratica devi tenere conto che pow convertirà al tipo double gli argomenti passati, e restituirà un double. Facendo un cast a long int staresti semplicemente troncando la parte decimale (e una cosa tipo 99.999999973 diventerebbe 99, non 100).

Prova a scrivere a mano una funzione int my_pow(int, int)

2 Mi Piace

Ok grazie per il suggerimento,proverò in questa modo.