2010-09-13 4 views
2

Это второй раз, когда у меня возникают запутанные результаты от оператора modulo, поэтому я уверен, что я должен что-то пропустить о том, как он работает, что я делаю неправильно здесь, что приводит к неправильным ответам? Эта функция должна принимать число и возвращать свои цифры в качестве указателя на массив (где первый элемент указывает, сколько цифр оно длительное). Фактически это возвращает массив, в котором все индексы после первого содержат исходный номер.Что мне не хватает в использовании оператора modulo?

int *getDigits(int n) 
{ 
     int digits = log10(n)+1; 
     int i = 1; 
     int *digit = malloc((digits+1) * sizeof(int)); 
     if (digit == NULL) { printf("error\n"); } 
     digit[0] = digits; 
     for (i = 1; i < digits+1; i++) { 
       int blah = (int) pow(10,i); 
       printf("digit[%d] = remainder of %d divided by %d\n",i,n,blah); 
       digit[i] = (n%blah); 
       printf("%dth digit %d\n",i,n); 
     } 
     return digit; 
} 

Когда я запускаю его на каждой итерации выглядит примерно так:

checking 500996 
digit[1] = remainder of 500996 divided by 10 
1th digit 500996 
digit[2] = remainder of 500996 divided by 100 
2th digit 500996 
digit[3] = remainder of 500996 divided by 1000 
3th digit 500996 
digit[4] = remainder of 500996 divided by 10000 
4th digit 500996 
digit[5] = remainder of 500996 divided by 100000 
5th digit 500996 
digit[6] = remainder of 500996 divided by 1000000 
6th digit 500996 
+0

Обратите внимание, что вы не должны использовать 'pow' для этого, так как нет никакой гарантии, что результат будет точным; последующее преобразование в целое число может приводить к появлению '99 ... 9' на некоторых платформах (или других значениях). Вы можете гарантировать точный результат, просто умножая на '10' (он будет быстрее, тоже). –

ответ

3

Вы сохраняете результат по модулю в цифре [я], но вы не печатаете, что:

digit[i] = (n%blah); 
printf("%dth digit %d\n",i,n); 

n % blah не изменяет n или blah, он возвращает результат только.

+0

OH LOL, я такой дебил. – girlygirl

1

Похоже, что вы всегда выдавались ввод:

printf("%dth digit %d\n",i,n); 

 Смежные вопросы

  • Нет связанных вопросов^_^