[英]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.