繁体   English   中英

如何将 output 数字的位数作为 integer,哪些数字可以精确地划分另一个数字?

[英]How to output the digits of a number as an integer, which the digits can exact divide the another number?

I have to output the digits of a number as an integer, which the digits of this number can exact divide another number with the function unsigned deldigits(unsigned num, unsigned short div) For example, if num=1234; div=2 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) ,因此 output 必须为13作为 integer。

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

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;
}

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

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

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;
    }

暂无
暂无

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

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