从右到左从整数减去数字

  • 本文关键字:数字 整数 从右到左 c
  • 更新时间 :
  • 英文 :

#include <stdio.h> 

void printDigit(int n) 
{ 
int d; 
int temp;
int temp2;
if (n == 0) { 
return; 
} 
d = n % 10; 
printf("%d ", d);
printDigit(n / 10); 
} 
int main() 
{ 
int n = 755545; 

printDigit(n); 
return 0; 
} 

所以我需要从右向左减去每一个数字,例如5-4= 1,4 -5=-1,然后打印成xxxx -1 1。我尝试了一些东西,比如在那里获得一个临时int,但我需要它改变每个递归。

编辑:对于输入数字755545,输出应为-2 0 0 -1 1。

不需要临时变量来存储前一位数字。表达式(n / 10) % 10会给出前面的数字。if(n / 10 == 0)确保递归提前一个深度结束,使得表达式(n / 10) % 10始终有效。

#include <stdio.h> 

void print_digit(int n)
{
if(n / 10 == 0) return;
print_digit(n / 10);
printf("%d ", (n % 10) - (n / 10 % 10));

}
int main() 
{ 
int n = 755545; 
print_digit(n);

return 0; 
} 

以数字755545为例,传递值75时遇到退出语句。下面是流程:

755545
|- 75554
|- 7555
|- 755
|- 75
print (75 % 10) - (75 / 10 % 10) = 5 - 7 =      -2
|- print (755 % 10) - (755 / 10 % 10) = 5 - 5 =     0
|- print ( 7555 % 10) - (7555 / 10 % 10) = 5 - 5 =   0
|- print (75554 % 10) - (75554 / 10 % 10) = 4 - 5 =  -1
print (755545 % 10) - (755545 / 10 % 10) = 5 - 4 =    1

下面是完整的函数

int subDigits(int number){
if(number>0){
int temp = number;
temp = temp / 10;
digits(number/10);
if(temp>0) {
cout << number % 10 - temp % 10 << " ";
}
}
}


int main() {
subDigits(1562);
return 0;
}

最新更新