ti allego , scusa per la scrittura a zampe di gallina, uno "schema" di come risolverei l'esercizio, per quello che secondo me potrebbe essere il modo più semplice (http://www.mediafire.com/?ob65kdzom6ag57z ). il professore mi aveva consigliato di scrivere prima il codice in c, cosa che ho fatto qui :

codice:
#include <stdio.h>
#define LIM_INF 0
#define LIM_SUP 64000
#define TARGET_DIGIT 2

int main(void) {
int A, B; 
int contatore, curr; 

//controllo dell'input
do { //ciclo che controlla se A < B
do { //ciclo che controlla se LIM_INF <= A <= LIM_SUP
printf("Inserisci estremo inferiore: "); 
scanf("%d", &A); 
} while (A < LIM_INF | A > LIM_SUP); 

do { //ciclo che controlla se LIM_INF <= B <= LIM_SUP
printf("Inserisci estremo superiore: "); 
scanf("%d", &B); 
} while (B < LIM_INF || B > LIM_SUP); 
} while (A > B); 

for (contatore = 0; A <= B; A++) 
//scompone il numero in cifre e cerca la cifra bersaglio (2 in questo caso)
for (curr = A; curr > 0; curr /= 10)
//ottengo cifra meno significativa e faccio quel che devo fare
if (curr % 10 == TARGET_DIGIT) 
contatore++;

printf("Sono stati trovati %d cifre uguali a %d\n", contatore, TARGET_DIGIT); 
printf("La somma delle %d occorrenze di %d e' %d\n", contatore, TARGET_DIGIT, TARGET_DIGIT * contatore); 
return 0; 
}