从C中的整数中提取数字?

问题描述 投票:0回答:3
void print(int num, int digits)
{
    double mod, divi;
    int mod1, divi1;
    mod = pow(10, digits);
    divi = pow(10, digits-1);
    mod1 = (int)mod;
    divi1 = (int)divi;

    if(digits > 0)
    {
        printf("%d\n", ((num%mod1)/divi1));
        digits--;
        print(num, digits);
    }
    else
    {
        return;
    }
}

此功能用于从num垂直打印数字,但是当我运行它时,它唯一打印的是0。我知道它能得到正确的数字位数,因为它打印出的零位数与数字中的位数相同,因此我在此处使用Modulo或Division一定有问题,而且我似乎不太可能找到它。任何帮助将不胜感激,谢谢!

获取数字的功能(也许问题在这里?):

void getNum()
{   
    int num, digits=0;
    printf("Enter a number to be printed vertically: ");
    scanf("%d", &num);

    if(num < 0)
    {
        digits = 1;
    }
    while(num)
    {
        num = num/10; //Here was the problem. Num was 0 once i passed it to print()
        digits++; //Simply added a new variable to fix it. Thanks all!
    }

    print(num, digits);
}
c integer-division
3个回答
1
投票

我看不到您的代码有什么问题,除了它太复杂并且不必要使用浮点数学。

这里是替代方法:

void print(int num, int digits)
{
    if (digits > 0) {
        print(num / 10, digits - 1);
        printf("%d\n", num % 10);
    }
}

技巧是移动打印after递归调用。这允许更简单的逻辑。


0
投票

这是解决我的问题的方法。在将num设置为0之前,将其传递给函数。我只是声明了另一个变量num1在while循环中使用,而不是传递给函数的实际num

[代码] >>

void getNum()
{   

    int num, num1, digits=0;
    //get the num
    printf("Enter a number to be printed vertically: ");
    scanf("%d", &num);
    num1 = num;

    //Loop to find how many digits are in the number
    while(num1)
    {
        num1 = num1/10;
        digits++;
    }
    //call function to print
    print(num, digits);
}

0
投票

NPE answer上几乎没有变化,我到达的代码版本消除了digits参数并适用于负数。

© www.soinside.com 2019 - 2024. All rights reserved.