I saw this problem and it begged to be brute-forced with a recursive algorithm.

int RecurseNumber(int *, int *, int *);

int main(int argc, char **argv){

int number⎖];
int used⎖];
int offset;
int i;

for(offset = 0 ; offset < 10 ; offset++){
	used[offset] = 0;	
	}
	
	/* 0 cannot be the first number */
for(i = 1 ; i < 10 ; i++){
	numberΎ] = i;
	used[i] = 1;
	offset = 1;
	if(RecurseNumber(used, number, &offset) == 1)
		break;
	used[i] = 0;	
	}
printf("\nnumber is : ");
for(i = 0 ; i < 10 ; i++)
	printf("%d", number[i]);
printf("\n\n");
return 0;
}




int RecurseNumber(int *used, int *number, int *offset){
int i, j;
double term, val;

if(*offset == 10)
	return 1;  // bottom of recursion

for(i = 0 ; i < 10 ; i++){

		// find an unused digit
	if(used[i] == 1)
		continue;

		// add unused digit to array
	number[*offset] = i;
	used[i] = 1;

	for(j = 0, val = 0 ; j < *offset + 1 ; j++){
		term = number[*offset - j]*(pow(10.0, (double)j));
		val += term;
		}

	if(fmod(val, (double)(*offset + 1)) != 0.0){	
		used[i] = 0;		// reset this digit to unused
		continue;		// go on to next digit
		}
	else{
		(*offset)++;
		if(RecurseNumber(used, number, offset) == 1)
			return 1;
		(*offset)--;
		used[i] = 0;
		continue;
		}
	}
	// no solution for this recursion path was found
return 0;
}