关于使用模运算符我有什么遗漏?

时间:2010-09-13 07:47:12

标签: c 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

2 个答案:

答案 0 :(得分:3)

您将模数的结果存储在digit [i]中,但不打印:

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

n % blah不修改n或blah,它只返回结果。

答案 1 :(得分:1)

您似乎总是打印输入:

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