现在位置: 首页 > C 教程 > 正文

C 练习实例18

C 语言经典100例 C 语言经典100例

题目:s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字,例如 2+22+222+2222+22222 (此时共有5个数相加),几个数相加有键盘控制。

程序分析:关键是计算出每一项的值。

实例

// Created by www.runoob.com on 15/11/9. // Copyright © 2015年 菜鸟教程. All rights reserved. // #include <stdio.h> int main() { int sum = 0; // 存储结果的变量 int base, terms; // base 为 a 的值,terms 为 n 的值 int temp; // 临时变量,用于计算当前项的值 // 提示用户输入值 printf("请输入整数 a 和 n(例如 2 和 5):\n"); scanf("%d%d", &base, &terms); // 初始化 temp 为 a temp = base; // 通过循环计算 a + aa + aaa + ... while (terms > 0) { sum += temp; // 累加当前项 base *= 10; // base 每次左移一位(例如 2 -> 20 -> 200) temp += base; // 更新 temp,使其变为下一项 terms--; // 减少剩余项数 } // 输出结果 printf("计算结果为:%d\n", sum); return 0; }

以上实例输出结果为:

请输入整数 a 和 n(例如 2 和 5):
2 5
计算结果为:24690

使用递归实现:

实例

#include <stdio.h>

// 递归函数,用于计算每一项的值
int calculate_term(int count, int base);

int main() {
    int count;  // 总项数
    int base;   // 初始值
    int sum = 0; // 累加结果

    // 提示用户输入初始值和总项数
    printf("请输入初始值 (a):");
    scanf("%d", &base);

    printf("请输入项数 (n):");
    scanf("%d", &count);

    // 校验输入的合法性
    if (count <= 0 || base <= 0) {
        printf("输入的初始值和项数必须为正整数!\n");
        return 1; // 返回错误状态
    }

    // 通过循环累加每一项
    for (int i = 1; i <= count; i++) {
        sum += calculate_term(i, base); // 调用递归函数计算第 i 项的值
    }

    // 输出最终结果
    printf("计算结果为:%d\n", sum);
    return 0;
}

// 递归函数,计算当前项的值
int calculate_term(int count, int base) {
    if (count == 1) {
        return base; // 递归终止条件:第一项直接返回 base
    } else {
        // 递归计算:当前项等于上一项乘以 10 加上 base
        return calculate_term(count - 1, base) * 10 + base;
    }
}

以上实例输出结果为:

请输入初始值 (a):2
请输入项数 (n):5
计算结果为:24690

C 语言经典100例 C 语言经典100例