1、题目:
编写一个函数int pieAdd(int n),计算1!+2!+3!+……+n!的值(n>=1)。
3、提示用户输入一个正整数n,求出并输出其阶乘值n! = 1*2*3*4*...n
4、提示用户输入一个正整数n,求出并输出下列结果:1! + 2! + 3! + 4! + ... + n!
要求:用至少两种方式实现(函数名自拟,函数个数不限)
1> 非递归
2> 递归
编写一个函数int pieAdd(int n),计算1!+2!+3!+……+n!的值(n>=1)。
比如pieAdd(3)的返回值是1! + 2! + 3! = 1 + 1*2 + 1*2*3 = 9
#import <Foundation/Foundation.h>
int peiAdd(int n);
int main(int argc, const char * argv[])
{
int n;
while (n <= 0) {
NSLog(@"请输入一个正数:");
scanf("%d",&n);
}
int result = peiAdd(n);
NSLog(@"计算结果为:%d",result);
return 0;
}
/*
解题思路:先计算出每个数字的阶乘,再把所有的阶乘加起来
*/
int peiAdd(int n){
int sum = 0; // 记录累加结果
int current = 0; //当前数字
for (int i = 1; i <= n ; i++) { //控制有多少个阶乘
current ++;
for (int j = 1; j<i; j++) {
current *= j;
}
sum += current;
}
return sum;}
2、 编写一个函数,判断某个字符串是否为回文。 回文就是从左边开始读 和 从右边开始读 都是一样的,比如"abcba"
#import <Foundation/Foundation.h>
int isHuiwen(char *str);
int main(int argc, const char * argv[])
{
char *str = "qwettewq";
NSLog(@"这串字符串是否回文(0表示不回文,1表示回文");
NSLog(@"%d",isHuiwen(str));
return 0;
}
int isHuiwen(char *str){
//1、定义一个指向指针变量left 指向字符串的首字符
char *left = str;
//2、定义一个指向指针变量right 指向字符串的末字符
char *right = str + strlen(str) - 1;
while (left < right) {
//如果左右两边字符串不一样 返回0
if(*left++ != *right--){
return 0;
}
}
//如果左右两边字符串一样 返回1
return 1;
}
3、提示用户输入一个正整数n,求出并输出其阶乘值n! = 1*2*3*4*...n
要求:用递归的方式编写一个函数实现n的阶乘
#import <Foundation/Foundation.h>
int chengjie(int n);
int main(int argc, const char * argv[])
{
int n;
while (n <= 0) {
NSLog(@"请输入一个正整数");
scanf("%d",&n);
}
// 计算阶乘
int result = chengjie(n);
NSLog(@"结果为:%d",result);
return 0;
}
int chengjie(int n){
// 如果n为1,那么阶乘值就是1
if (n == 1) {
return 1;
}
return chengjie(n-1) * n;
}
4、提示用户输入一个正整数n,求出并输出下列结果:1! + 2! + 3! + 4! + ... + n!
要求:用至少两种方式实现(函数名自拟,函数个数不限)
1> 非递归
2> 递归
#include <stdio.h>
int pieAdd(int n);
int main()
{
// 1.定义变量存储用户输入的整数
int n = 0;
// 2.判断n是否为正整数
while (n <= 0)
{
// 2.1 提示输入
printf("输入一个正整数:\n");
// 2.2 让用户输入
scanf("%d", &n);
}
// 3.计算结果
int result = pieAdd(n);
printf("结果是%d\n", result);
return 0;
}
// ------------------非递归的方式----------------
int pieAdd(int n)
{
// 1.定义变量保存总和
int sum = 0;
// 2.需要累加n次,每次累加的都是一个阶乘值
for (int i = 1; i<=n; i++)
{
// 3.计算阶乘i!
// 3.1 定义变量保存阶乘的结果
int multi = 1;
for (int j = 1; j<=i; j++)
{
multi *= j;
}
// 4.累加每次的阶乘结果
sum += multi;
}
// 5.返回和
return sum;
}
/*
// ------------------递归的方式----------------
// 为了代码方便和性能,额外定义一个函数求阶乘
int jieCheng(int n)
{
// 如果n为1,那么阶乘值就是1
if (n == 1) return 1;
// jieCheng(n) = n! = 1*2*3*...*(n-1)*n
// jieCheng(n-1) = (n-1)! = 1*2*3*...*(n-1)
// jieCheng(n) = jieCheng(n-1) * n
return jieCheng(n-1) * n;
}
int pieAdd(int n)
{
// 1.如果n是1,计算结果就是1
if (n == 1) return 1;
// pieAdd(n) = 1! + 2! + ... + (n-1)!+ n!
// pieAdd(n-1) = 1! + 2! + ... + (n-1)!
// pidAdd(n) = pieAdd(n-1) + n!
return pieAdd(n - 1) + jieCheng(n);
}*/