繁体   English   中英

从C和C中获取单个数字和整数

[英]Obtaining the Individual Digits from and Integer - C programming

我正在尝试分解数字并获取每个数字。 我试图通过除以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;
}

当有完美的积分数学方法时,我不会使用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');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM