#递归法求一个非负整数的各位数之和与 n 的 k 次方#

1. 要求

  • 输入一个非负整数,求各位数之和(input123,output1+2+3=6);
  • 递归法;
  • 求n 的 k 次方时不得直接调用内部函数pow(x, y);

2. 代码

2.1.1 递归法求非负整数各位数之和

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>

int DigitSum(int x)
{
	if (x / 10 != 0)
		return DigitSum(x / 10) + x % 10;
	else
	    return x;
}

int main()
{
	int num = 0;
	printf("请输入一个非负整数>:");
	scanf("%d", &num);
	int sum = DigitSum(num);
	printf("%d的各个位数之和等于%d\n", num, sum);
	return 0;
}

2.1.2 迭代法求非负整数各位数之和

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>

int main()
{
	int num = 0;
	int sum = 0;
	printf("请输入一个非负整数>:");
	scanf("%d", &num);
	int tmp = num;
	while (num > 0)
	{
		sum += num % 10;
		num /= 10;
	}
	printf("%d的各个位数之和等于%d\n", tmp, sum);
	return 0;
}

2.2 递归法求 n 的 k 次方

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include <stdio.h>

double Pow(int x, int y)
{
	if (y > 0)
		return x * Pow(x, y - 1);
	else if (y == 0)
		return 1.0;
	else
		return 1.0 / Pow(x, -y);
}
int main()
{
	int n, k;
	printf("输入n和k>:");
	scanf("%d %d", &n, &k);
	double ret = Pow(n, k);
	printf("%d的%d次方等于%lf\n", n, k, ret);
	return 0;
}

3. 总结

要注意的就是求 n 的 k 次方时,n和k都得为整数;其次就是,如果k为负数的时候,返回值为小数,得返回double类型的值。< smile 好好学习,天天向上 smile

visual-c++·c++·c
120 views
Comments
登录后评论
Sign In
·

666