YouTip LogoYouTip

C Exercise Example18

## C Programming Exercise - Example 18 This tutorial provides a comprehensive guide to solving a classic mathematical sequence summation problem in C. We will explore how to calculate the sum of a sequence where each term is constructed by repeating a single digit. --- ### Problem Description Write a C program to calculate the sum of the sequence: $$s = a + aa + aaa + aaaa + \dots + \underbrace{aa\dots a}_{n \text{ times}}$$ Where: * $a$ is a single-digit integer (e.g., $2$). * $n$ is the total number of terms to add (e.g., $5$). * The user inputs both $a$ and $n$ from the keyboard. **Example:** If $a = 2$ and $n = 5$, the sequence is: $$2 + 22 + 222 + 2222 + 22222 = 24690$$ --- ### Mathematical Logic & Analysis The core challenge is generating each term of the sequence dynamically. Let $T_i$ represent the $i$-th term of the sequence: * $T_1 = a$ * $T_2 = a \times 10 + a$ * $T_3 = T_2 \times 10 + a$ * $T_i = T_{i-1} \times 10 + a$ By using this recurrence relation, we can easily compute each term in a loop or via recursion, accumulating the values into a running sum. --- ### Implementation 1: Iterative Approach (Using a Loop) This approach uses a simple `while` loop to construct each term and add it to the total sum. It is highly efficient and straightforward. #### Source Code ```c #include int main() { int sum = 0; // Variable to store the accumulated sum int base, terms; // 'base' represents 'a', 'terms' represents 'n' int temp; // Temporary variable to calculate the current term // Prompt user for input printf("Please enter integers a and n (e.g., 2 and 5):\n"); if (scanf("%d%d", &base, &terms) != 2) { printf("Invalid input.\n"); return 1; } // Initialize temp with the base value 'a' temp = base; // Loop to calculate and accumulate: a + aa + aaa + ... while (terms > 0) { sum += temp; // Add the current term to the sum base *= 10; // Shift base left by one decimal place (e.g., 2 -> 20 -> 200) temp += base; // Update temp to represent the next term terms--; // Decrement the remaining term count } // Output the final result printf("The calculated sum is: %d\n", sum); return 0; } ``` #### Sample Output ```text Please enter integers a and n (e.g., 2 and 5): 2 5 The calculated sum is: 24690 ``` --- ### Implementation 2: Recursive Approach For a more modular design, we can use recursion. Here, a recursive function `calculate_term` calculates the value of the $i$-th term, and the `main` function sums them up. #### Source Code ```c #include // Recursive function declaration to calculate the value of a specific term int calculate_term(int count, int base); int main() { int count; // Total number of terms (n) int base; // The digit value (a) int sum = 0; // Accumulated sum // Prompt user for input printf("Please enter the base value (a): "); scanf("%d", &base); printf("Please enter the number of terms (n): "); scanf("%d", &count); // Validate input values if (count <= 0 || base <= 0) { printf("Error: Both base and terms must be positive integers!\n"); return 1; // Return error status } // Loop to accumulate each term calculated by the recursive function for (int i = 1; i <= count; i++) { sum += calculate_term(i, base); } // Output the final result printf("The calculated sum is: %d\n", sum); return 0; } /** * Recursive function to calculate the value of the i-th term. * @param count The term index (1-based) * @param base The digit 'a' * @return The value of the term (e.g., if count=3 and base=2, returns 222) */ int calculate_term(int count, int base) { if (count == 1) { return base; // Base case: the first term is simply 'a' } else { // Recursive step: current term = (previous term * 10) + base return calculate_term(count - 1, base) * 10 + base; } } ``` #### Sample Output ```text Please enter the base value (a): 2 Please enter the number of terms (n): 5 The calculated sum is: 24690 ``` --- ### Important Considerations & Edge Cases 1. **Integer Overflow:** In C, standard `int` types typically have a maximum value of $2,147,483,647$ (32-bit signed integer). If $n$ is large (e.g., $n \ge 10$), the term values or the accumulated sum will easily overflow. * *Solution:* For larger sequences, use `long long` instead of `int` and update the format specifiers in `printf`/`scanf` to `%lld`. 2. **Input Validation:** Always ensure that $a$ is a single-digit integer ($1 \le a \le 9$) and $n$ is a positive integer ($n \ge 1$) to prevent unexpected mathematical results or infinite recursion.
← C Exercise Example19C Exercise Example17 β†’