从整数中获取单个数字 - C 编程

问题描述 投票:0回答:2

我正在尝试分解一个数字并获得每个单独的数字。我试图通过除以 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;
}
c divide digit
2个回答
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');
}

0
投票

如果您只需要整数,以下代码片段非常简单:

divider = 10;
while( digit > 0)
{
    individualDigit =  ((digit % divider) / (divider / 10));
    printf("%d ", individualDigit);
    digit -= individualDigit * (divider / 10);
    divider *= 10;
}
© www.soinside.com 2019 - 2024. All rights reserved.