brain289 2023-10-26 16:03 采纳率: 100%
浏览 4
已结题

关于#c++#的问题:设计一个函数,根据输入参数的不同,分别计算n的累加(相关搜索:回文数)

设计一个函数,根据输入参数的不同,分别计算n的累加,n阶乘,n以内的所有素数,n以内所有的回文数。输入一个n需要全部输出

  • 写回答

2条回答 默认 最新

  • K_n_i_g_h_t_1990 2023-10-26 16:09
    关注

    为了设计一个函数,根据输入参数的不同,分别计算n的累加,n阶乘,n以内的所有素数,n以内所有的回文数,我们需要先定义一个枚举类型(enum type),用于表示不同的计算模式。我们可以用以下的代码来实现这个枚举类型:

    
    //定义一个枚举类型,表示不同的计算模式
    typedef enum {
        SUM, //表示累加模式
        FACTORIAL, //表示阶乘模式
        PRIME, //表示素数模式
        PALINDROME //表示回文数模式
    } Mode;
    
    

    然后,我们需要定义一个函数,根据输入参数的不同,分别计算n的累加,n阶乘,n以内的所有素数,n以内所有的回文数。我们可以用以下的代码来实现这个函数:

    //定义一个函数,根据输入参数的不同,分别计算n的累加,n阶乘,n以内的所有素数,n以内所有的回文数
    void calculate(int n, Mode mode) {
        //根据不同的模式进行不同的计算
        switch (mode) {
            case SUM: //如果是累加模式
                int sum = 0; //定义一个变量,用于存储和
                for (int i = 1; i <= n; i++) { //1到n遍历所有自然数
                    sum += i; //将每个数加到和中
                }
                printf("n的累加为:%d\n", sum); //输出结果
                break;
            case FACTORIAL: //如果是阶乘模式
                int factorial = 1; //定义一个变量,用于存储阶乘
                for (int i = 1; i <= n; i++) { //1到n遍历所有自然数
                    factorial *= i; //将每个数乘到阶乘中
                }
                printf("n的阶乘为:%d\n", factorial); //输出结果
                break;
            case PRIME: //如果是素数模式
                printf("n以内的所有素数为:\n"); //输出提示信息
                for (int i = 2; i <= n; i++) { //2到n遍历所有自然数
                    int is_prime = 1; //定义一个标志变量,表示是否是素数,默认为1(是)
                    for (int j = 2; j < i; j++) { //2到i-1遍历所有可能的因数
                        if (i % j == 0) { //如果i能被j整除
                            is_prime = 0; //将标志变量设为0(否)
                            break; //跳出循环
                        }
                    }
                    if (is_prime) { //如果标志变量为1(是)
                        printf("%d ", i); //输出该素数,并空一格
                    }
                }
                printf("\n"); //换行
                break;
            case PALINDROME: //如果是回文数模式
                printf("n以内的所有回文数为:\n"); //输出提示信息
                for (int i = 1; i <= n; i++) { //1到n遍历所有自然数
                    int is_palindrome = 1; //定义一个标志变量,表示是否是回文数,默认为1(是)
                    int temp = i; //定义一个临时变量,用于存储i的副本
                    int reverse = 0; //定义一个变量,用于存储i的反转数
                    while (temp > 0) { //循环反转i
                        reverse = reverse * 10 + temp % 10; //将i的最低位加到reverse的最高位
                        temp /= 10; //将i的最低位去掉
                    }
                    if (reverse != i) { //如果反转数不等于原数
                        is_palindrome = 0; //将标志变量设为0(否)
                    }
                    if (is_palindrome) { //如果标志变量为1(是)
                        printf("%d ", i); //输出该回文数,并空一格
                    }
                }
                printf("\n"); //换行
                break;
            default: //如果是其他模式
                printf("无效的模式\n"); //输出错误信息
                break;
        }
    }
    
    
    

    最后,我们需要定义一个主函数,用于测试我们定义的函数。我们可以用以下的代码来实现这个主函数:

    
    //主函数,测试我们定义的函数
    int main() {
        int n; //定义一个变量,用于存储输入的n
        Mode mode; //定义一个变量,用于存储输入的mode
        printf("请输入一个自然数n:\n"); //输出提示信息
        scanf("%d", &n); //输入n
        printf("请输入一个计算模式(0-累加,1-阶乘,2-素数,3-回文数):\n"); //输出提示信息
        scanf("%d", &mode); //输入mode
        calculate(n, mode); //调用我们定义的函数,进行计算并输出结果
        return 0; //结束程序
    }
    
    

    你可以将以上四个函数合并在一起,并加上必要的头文件和注释,就得到了一个完整的C语言程序,用于根据输入参数的不同,分别计算n的累加,n阶乘,n以内的所有素数,n以内所有的回文数。你可以运行这个程序,并输入你想要计算的n和mode,看看结果是否正确。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月2日
  • 创建了问题 10月26日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上