获取单个数字和整数 - C编程

时间:2015-08-02 04:38:32

标签: c divide digit

我试图分解一个数字并获得每个数字。我试图通过除以10的幂直到达到0来做到这一点。每次除以10它都会增加整数中的总位数。一旦我有了总位数,我将原始数字除以10到数字位数 - 1然后减少位数并重复该过程。这一直工作到最后一个数字,我得到4而不是6.我尝试使用不同的数字,最后一个,有时倒数第二个数字是错误的数字。有什么理由说明为什么会这样做,任何帮助都会受到赞赏。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int indx;
    int originalDigit = 1234;
    int numDigits;
    int digit;
    int individualDigit;

    numDigits = 0;

    digit = originalDigit;

    while(digit > 0)
    {
        digit = digit / 10;
        numDigits++;

    }

    printf("%d\n", numDigits);

    digit = originalDigit;
    while( digit > 0)
    {
        individualDigit = digit / (int)pow(10, numDigits - 1);

        printf("%d ", individualDigit);
        digit = digit % (int)pow(10, numDigits - 1);
        numDigits--;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果有完美的方法可以使用整数数学,我就不会使用pow之类的浮点函数。

一种解决方案是将数字sprintf简单地放入缓冲区,然后您可以使用strlen获取数字计数,使用单个字符来获取数字:

void method1 (int val) {
    char buff[50];
    sprintf (buff, "%d", val);
    printf ("Digit count = %d, digits =", strlen (buff));
    for (int i = 0; i < strlen (buff); i++)
        printf (" %c", buff[i]);
    putchar ('\n');
}

另一种方法是使用modulo-10方法将数字加载到数组中,然后反转顺序(通过物理交换或简单地向后处理数组):

void method2 (int val) {
    int len, buff[50];
    for (len = 0; val > 0; len++, val /= 10)
        buff[len] = val % 10;

    // Logical swap.

    printf ("Digit count = %d, digits =", len);
    for (int i = len - 1; i >= 0; i--)
        printf (" %d", buff[i]);
    putchar ('\n');
}

void method3 (int val) {
    int len, buff[50];
    for (len = 0; val > 0; len++, val /= 10)
        buff[len] = val % 10;

    // Pyhsical swap.

    for (int i = 0, j = len - 1; i < j; i++, j--) {
        int t = buff[i];
        buff[i] = buff[j];
        buff[j] = t;
    }

    printf ("Digit count = %d, digits =", len);
    for (int i = 0; i < len; i++)
        printf (" %d", buff[i]);
    putchar ('\n');
}