首页 > 解决方案 > 如何将数字的数字输出为整数,这些数字可以精确地划分另一个数字?

问题描述

我必须将一个数字的数字输出为整数,这个数字的数字可以用函数精确除另一个数字unsigned deldigits(unsigned num, unsigned short div) 。例如,如果,则num=1234; div=2数字,,,,,所以输出必须为整数。1%2=1 (then i need the digit 1)2%2=0(take out)3%2=1 (then i need the digit 3)4%2=0 (take out)13

不允许使用循环、globe/static 变量、数组或指针(也不允许使用库函数,但我先用它来测试)。我尝试使用另一个函数来帮助取消仅通过递归处理所有函数。中间的计算是正确的,但不知何故输出整数不正确,我无法得到它。

unsigned deldigits(unsigned num, unsigned short div)
{   
    if(num == 0) return 0;  

    int digit = num / (digitPower(num)/10);
    int modulo = digit % div;
    printf("ziffer: %d div: %d modulo: %d\n", digit, div, modulo);

    if(digitPower(num) == 0)
            return 0;
    return (digit*10 + deldigits(num - digit*(digitPower(num)/10), div));
}

int digitPower(int n)
{
    if(n == 0) return 1;
    return 10*digitPower(n/10);
}

int main()
{
    unsigned n = 1234;
    unsigned short d = 2;
    int z = deldigits(n, d);
    printf("deldigits:  %d\n", z); 
    return 0;
}

主要功能只是测试功能和输出。在这种情况下,输出必须是13,但现在我得到了错误的输出120。有人可以帮我吗?谢谢!

标签: crecursion

解决方案


你把问题复杂化了。您可以使用

num % 10

获取数字的最后一位,然后检查它是否可以被 div 整除。如果是,您将其添加到您的答案中,并以 10 为基数,然后通过将 num 除以 10 来删除您刚刚检查的数字。然后重复直到没有更多数字。示例代码:

   int recursion(int num,int div,int base) {
      int out = 0;
      if(num) {
        int digit = (num % 10);
        printf("digit %i\n",digit);
        if((digit % div) != 0) {
          out += digit * base;
          base *= 10;
        }
        out += recursion(num/10,div,base);
      }
      return out;
    }

推荐阅读