函数digit(n, k)的功能是:求正整数n中从右端开始的第k(≥1)个数字的值(k从1开始),如果k超过了n的位数,则函数返回 - 1;否则返回n中第k个数字。
例如:digit(114514, 3) = 5 digit(114514, 99) = -1
要求:分别用递归和非递归设计该函数。
//函数digit(n, k)的功能是:求正整数n中从右端开始的第k(≥1)个数字的值(k从1开始),如果k超过了n的位数,则函数返回 - 1;否则返回n中第k个数字。
//例如:digit(264639, 3) = 5 digit(7622, 5) = -1
//要求分别用递归和非递归设计该函数。
//非递归方法:
#include<stdio.h>
//
int digitA(int n, int k) //n是数字 k是位数
{
int count=0,copy=n,i;
while (copy%10)
{
copy = copy / 10;
count++;
}
if (count < k)
return -1;
else
{
while (--k)
{
n = n / 10;
}
return (n % 10);
}
}
// 递归方法:
int digitB(int n, int k)
{
int count;
if (n == 0)
return -1;
if (k > 1)
{
n = n / 10;
return digitB(n, k - 1);
}
else
return (n % 10);
}
int main()
{
int n, k,a;
scanf("%d", &n);
scanf("%d", &k);
a = digitA(n, k);
printf("%d\n", a);
a = digitB(n, k);
printf("%d\n", a);
return 0;
}
代码运行图: