برنامه محاسبه مجموع اعداد از ۱ تا n — راهنمای کاربردی

۱۰۵۴۰ بازدید
آخرین به‌روزرسانی: ۱۰ تیر ۱۴۰۲
زمان مطالعه: ۱۵ دقیقه
برنامه محاسبه مجموع اعداد از ۱ تا n — راهنمای کاربردی

در این مطلب، آموزش نوشتن برنامه محاسبه مجموع اعداد از ۱ تا n به همراه کد پیاده‌سازی روش‌های مذکور در زبان‌های برنامه‌نویسی گوناگون شامل ++C، «جاوا» (Java)، «پایتون» (Python)، «سی‌شارپ» (#C) و «پی‌اچ‌پی» (PHP) ارائه شده است. فرض می‌شود که عدد n داده شده است. هدف، پیدا کردن مجموع همه اعداد از ۱ تا n است.

مثال:

Input: n = 5
Output: Sum of digits in numbers from 1 to 5 = 15

Input: n = 12
Output: Sum of digits in numbers from 1 to 12 = 51

Input: n = 328
Output: Sum of digits in numbers from 1 to 328 = 3241

روش اول برای محاسبه مجموع اعداد از ۱ تا n

یک راهکار ساده و پیش پا افتاده برای حل مساله بیان شده، شروع از ۱ تا n و محاسبه مجموع در x، با پیمایش همه ارقام x است. در زیر، روش پیاده‌سازی این مورد بیان شده است.

برنامه محاسبه مجموع اعداد از ۱ تا n در ++C

1// A Simple C++ program to compute sum of digits in numbers from 1 to n 
2#include<bits/stdc++.h> 
3using namespace std; 
4  
5int sumOfDigits(int ); 
6  
7// Returns sum of all digits in numbers from 1 to n 
8int sumOfDigitsFrom1ToN(int n) 
9{ 
10    int result = 0; // initialize result 
11  
12    // One by one compute sum of digits in every number from 
13    // 1 to n 
14    for (int x = 1; x <= n; x++) 
15        result += sumOfDigits(x); 
16  
17    return result; 
18} 
19  
20// A utility function to compute sum of digits in a 
21// given number x 
22int sumOfDigits(int x) 
23{ 
24    int sum = 0; 
25    while (x != 0) 
26    { 
27        sum += x %10; 
28        x   = x /10; 
29    } 
30    return sum; 
31} 
32  
33// Driver Program 
34int main() 
35{ 
36    int n = 328; 
37    cout << "Sum of digits in numbers from 1 to " << n << " is "
38         << sumOfDigitsFrom1ToN(n); 
39    return 0; 
40}

برنامه محاسبه مجموع اعداد از ۱ تا n در جاوا

1// A Simple JAVA program to compute sum of 
2// digits in numbers from 1 to n 
3import java.io.*; 
4  
5class GFG { 
6      
7    // Returns sum of all digits in numbers  
8    // from 1 to n 
9    static int sumOfDigitsFrom1ToN(int n) 
10    { 
11        int result = 0; // initialize result 
12       
13        // One by one compute sum of digits 
14        // in every number from 1 to n 
15        for (int x = 1; x <= n; x++) 
16            result += sumOfDigits(x); 
17       
18        return result; 
19    } 
20       
21    // A utility function to compute sum  
22    // of digits in a given number x 
23    static int sumOfDigits(int x) 
24    { 
25        int sum = 0; 
26        while (x != 0) 
27        { 
28            sum += x % 10; 
29            x   = x / 10; 
30        } 
31        return sum; 
32    } 
33       
34    // Driver Program 
35    public static void main(String args[]) 
36    { 
37        int n = 328; 
38        System.out.println("Sum of digits in numbers"
39                          +" from 1 to " + n + " is "
40                          + sumOfDigitsFrom1ToN(n)); 
41    } 
42} 
43  
44/*This code is contributed by Nikita Tiwari.*/

برنامه محاسبه مجموع اعداد از ۱ تا n در پایتون ۳

1# A Simple Python program to compute sum 
2# of digits in numbers from 1 to n 
3  
4# Returns sum of all digits in numbers  
5# from 1 to n 
6def sumOfDigitsFrom1ToN(n) : 
7  
8    result = 0   # initialize result 
9   
10    # One by one compute sum of digits  
11    # in every number from 1 to n 
12    for x in range(1, n+1) : 
13        result = result + sumOfDigits(x) 
14   
15    return result 
16  
17# A utility function to compute sum of  
18# digits in a given number x 
19def sumOfDigits(x) : 
20    sum = 0
21    while (x != 0) : 
22        sum = sum + x % 10
23        x   = x // 10
24      
25    return sum
26  
27  
28# Driver Program 
29n = 328
30print("Sum of digits in numbers from 1 to", n, "is", sumOfDigitsFrom1ToN(n)) 
31  
32  
33# This code is contributed by Nikita Tiwari. 

برنامه محاسبه مجموع اعداد از ۱ تا n در #C

1// A Simple C# program to compute sum of 
2// digits in numbers from 1 to n 
3  
4using System; 
5  
6public class GFG { 
7      
8    // Returns sum of all digits in numbers  
9    // from 1 to n 
10    static int sumOfDigitsFrom1ToN(int n) 
11    { 
12          
13        // initialize result 
14        int result = 0; 
15      
16        // One by one compute sum of digits 
17        // in every number from 1 to n 
18        for (int x = 1; x <= n; x++) 
19            result += sumOfDigits(x); 
20      
21        return result; 
22    } 
23      
24    // A utility function to compute sum  
25    // of digits in a given number x 
26    static int sumOfDigits(int x) 
27    { 
28        int sum = 0; 
29          
30        while (x != 0) 
31        { 
32            sum += x % 10; 
33            x = x / 10; 
34        } 
35          
36        return sum; 
37    } 
38      
39    // Driver Program 
40    public static void Main() 
41    { 
42        int n = 328; 
43          
44        Console.WriteLine("Sum of digits"
45               + " in numbers from 1 to "
46                             + n + " is "
47                + sumOfDigitsFrom1ToN(n)); 
48    } 
49} 
50  
51// This code is contributed by shiv_bhakt.

برنامه محاسبه مجموع اعداد از ۱ تا n در PHP

1<?php 
2  
3// A Simple php program to compute sum  
4//of digits in numbers from 1 to n 
5  
6// Returns sum of all digits in 
7// numbers from 1 to n 
8function sumOfDigitsFrom1ToN($n) 
9{ 
10    $result = 0; // initialize result 
11  
12    // One by one compute sum of digits 
13    // in every number from 1 to n 
14    for ($x = 1; $x <= $n; $x++) 
15        $result += sumOfDigits($x); 
16  
17    return $result; 
18} 
19  
20// A utility function to compute sum 
21// of digits in a given number x 
22function sumOfDigits($x) 
23{ 
24    $sum = 0; 
25    while ($x != 0) 
26    { 
27        $sum += $x %10; 
28        $x = $x /10; 
29    } 
30    return $sum; 
31} 
32  
33// Driver Program 
34  
35    $n = 328; 
36    echo "Sum of digits in numbers from" 
37               . " 1 to " . $n . " is " 
38               . sumOfDigitsFrom1ToN($n); 
39      
40// This code is contributed by ajit 
41?>

خروجی

خروجی قطعه کدهای بالا برای n = ۳۲۸ به صورت زیر است.

Sum of digits in numbers from 1 to 328 is 3241

روش دوم محاسبه مجموع اعداد از ۱ تا n

راهکار بالا، روش ساده‌ای است. در ادامه، یک روش موثرتر برای حل مساله مذکور ارائه می‌شود.

مثال‌های زیر در این راستا قابل توجه هستند.

sum(9) = 1 + 2 + 3 + 4 ........... + 9
       = 9*10/2 
       = 45

sum(99)  = 45 + (10 + 45) + (20 + 45) + ..... (90 + 45)
         = 45*10 + (10 + 20 + 30 ... 90)
         = 45*10 + 10(1 + 2 + ... 9)
         = 45*10 + 45*10
         = sum(9)*10 + 45*10 

sum(999) = sum(99)*10 + 45*100

به طور کلی، می‌توان (sum(10d – 1 را با استفاده از رابطه زیر محاسبه کرد.

 sum(10d - 1) = sum(10d-1 - 1) * 10 + 45*(10d-1)

در کدهای ارائه شده در پایین، فرمول بالا با استفاده از «برنامه‌نویسی پویا» (Dynamic Programming) استفاده شده است، زیرا چند زیرمساله دارای هم‌پوشانی وجود دارد. فرمول بالا گام اصلی روش مورد استفاده است. در ادامه، الگوریتم کامل آمده است.

الگوریتم محاسبه مجموع اعداد از ۱ تا n

  1. تعداد ارقام از ۱ تا n، منهای یکی را پیدا کن. این مقدار را d بنام. (برای ۳۲۸، مقدار d برابر با ۲ است.)
  2. مجموع ارقام از ۱ تا 10d - 1 را محاسبه کن. این مجموع را w بنام. برای ۳۲۸، مجموع اعداد از ۱ تا ۹۹ را با استفاده از فرمول بالا محاسبه کن. (برای ۳۲۸، مجموع ارقام از ۱ تا ۹۹ با استفاده از فرمول بالا محاسبه می‌شود.)
  3. موثرترین رقم (Most significant digit | msd) در n را پیدا کن. (برای ۳۲۸، msd عدد ۳ است.)
  4. مجموع کل، برابر با مجموع عبارات زیر است.
    • مجموع ارقام از ۱ تا «msd * 10d - 1». برای ۳۲۸، مجموع ارقام از ۱ تا ۲۹۹ است. (برای ۳۲۸، مقدار 3*sum(99) + (1 + 2)*100 محاسبه می‌شود. توجه به این نکته لازم است که (sum(299 برابر با (sum(99 به علاوه ارقام از ۱۰۰ تا ۱۹۹ به علاوه ارقام از ۲۰۰ تا ۲۹۹ است. مجموع ۱۰۰ تا ۱۹۹، برابر است با sum(99) + 1*100 و مجموع ۲۹۹ برابر است با sum(99) + 2*100. به طور کلی، این مجموع را می‌توان به صورت w*msd + (msd*(msd-1)/2)*10d محاسبه کرد.
    • مجموع ارقام از msd * 10d تا n را محاسبه کن. (برای ۳۲۸، مجموع ارقام از ۳۰۰ تا ۳۲۸ باید محاسبه شود. برای ۳۲۸، این مجموع به صورت 3*29 + فراخوانی بازگشتی (sum(28 محاسبه می‌شود. به طور کلی، این مجموع را می‌توان به صورت ((msd * (n % (msd*10d) + 1) + sum(n % (10d محاسبه کرد.)
  5. در ادامه، پیاده‌سازی الگوریتم بالا ارائه شده است.

برنامه محاسبه مجموع اعداد از ۱ تا n در ++C

1// C++ program to compute sum of digits in numbers from 1 to n 
2#include<bits/stdc++.h> 
3using namespace std; 
4  
5// Function to computer sum of digits in numbers from 1 to n 
6// Comments use example of 328 to explain the code 
7int sumOfDigitsFrom1ToN(int n) 
8{ 
9    // base case: if n<10 return sum of 
10    // first n natural numbers 
11    if (n<10) 
12      return n*(n+1)/2; 
13  
14    // d = number of digits minus one in n. For 328, d is 2 
15    int d = log10(n); 
16  
17    // computing sum of digits from 1 to 10^d-1, 
18    // d=1 a[0]=0; 
19    // d=2 a[1]=sum of digit from 1 to 9 = 45 
20    // d=3 a[2]=sum of digit from 1 to 99 = a[1]*10 + 45*10^1 = 900 
21    // d=4 a[3]=sum of digit from 1 to 999 = a[2]*10 + 45*10^2 = 13500 
22    int *a = new int[d+1]; 
23    a[0] = 0, a[1] = 45; 
24    for (int i=2; i<=d; i++) 
25        a[i] = a[i-1]*10 + 45*ceil(pow(10,i-1)); 
26  
27    // computing 10^d 
28    int p = ceil(pow(10, d)); 
29  
30    // Most significant digit (msd) of n, 
31    // For 328, msd is 3 which can be obtained using 328/100 
32    int msd = n/p; 
33  
34    // EXPLANATION FOR FIRST and SECOND TERMS IN BELOW LINE OF CODE 
35    // First two terms compute sum of digits from 1 to 299 
36    // (sum of digits in range 1-99 stored in a[d]) + 
37    // (sum of digits in range 100-199, can be calculated as 1*100 + a[d] 
38    // (sum of digits in range 200-299, can be calculated as 2*100 + a[d] 
39    //  The above sum can be written as 3*a[d] + (1+2)*100 
40  
41    // EXPLANATION FOR THIRD AND FOURTH TERMS IN BELOW LINE OF CODE 
42    // The last two terms compute sum of digits in number from 300 to 328 
43    // The third term adds 3*29 to sum as digit 3 occurs in all numbers  
44    //                from 300 to 328 
45    // The fourth term recursively calls for 28 
46    return msd*a[d] + (msd*(msd-1)/2)*p +   
47           msd*(1+n%p) + sumOfDigitsFrom1ToN(n%p); 
48} 
49  
50// Driver Program 
51int main() 
52{ 
53    int n = 328; 
54    cout << "Sum of digits in numbers from 1 to " << n << " is "
55         << sumOfDigitsFrom1ToN(n); 
56    return 0; 
57}

برنامه محاسبه مجموع اعداد از ۱ تا n در جاوا

1// JAVA program to compute sum of digits  
2// in numbers from 1 to n 
3import java.io.*; 
4import java.math.*; 
5  
6class GFG{ 
7      
8    // Function to computer sum of digits in  
9    // numbers from 1 to n. Comments use  
10    // example of 328 to explain the code 
11    static int sumOfDigitsFrom1ToN(int n) 
12    { 
13        // base case: if n<10 return sum of 
14        // first n natural numbers 
15        if (n < 10) 
16          return (n * (n + 1) / 2); 
17       
18        // d = number of digits minus one in 
19        // n. For 328, d is 2 
20        int d = (int)(Math.log10(n)); 
21       
22        // computing sum of digits from 1 to 10^d-1, 
23        // d=1 a[0]=0; 
24        // d=2 a[1]=sum of digit from 1 to 9 = 45 
25        // d=3 a[2]=sum of digit from 1 to 99 =  
26        // a[1]*10 + 45*10^1 = 900 
27        // d=4 a[3]=sum of digit from 1 to 999 = 
28        // a[2]*10 + 45*10^2 = 13500 
29        int a[] = new int[d+1]; 
30        a[0] = 0; a[1] = 45; 
31        for (int i = 2; i <= d; i++) 
32            a[i] = a[i-1] * 10 + 45 *  
33                 (int)(Math.ceil(Math.pow(10, i-1))); 
34       
35        // computing 10^d 
36        int p = (int)(Math.ceil(Math.pow(10, d))); 
37       
38        // Most significant digit (msd) of n, 
39        // For 328, msd is 3 which can be obtained 
40        // using 328/100 
41        int msd = n / p; 
42       
43        // EXPLANATION FOR FIRST and SECOND TERMS IN 
44        // BELOW LINE OF CODE 
45        // First two terms compute sum of digits from 
46        // 1 to 299  
47        // (sum of digits in range 1-99 stored in a[d]) + 
48        // (sum of digits in range 100-199, can be  
49        // calculated as 1*100 + a[d] 
50        // (sum of digits in range 200-299, can be  
51        // calculated as 2*100 + a[d] 
52        //  The above sum can be written as 3*a[d] +  
53        // (1+2)*100 
54       
55        // EXPLANATION FOR THIRD AND FOURTH TERMS IN  
56        // BELOW LINE OF CODE 
57        // The last two terms compute sum of digits in  
58        // number from 300 to 328. The third term adds 
59        // 3*29 to sum as digit 3 occurs in all numbers  
60        // from 300 to 328. The fourth term recursively 
61        // calls for 28 
62        return (msd * a[d] + (msd * (msd - 1) / 2) * p +   
63              msd * (1 + n % p) + sumOfDigitsFrom1ToN(n % p)); 
64    } 
65       
66    // Driver Program 
67    public static void main(String args[]) 
68    { 
69        int n = 328; 
70        System.out.println("Sum of digits in numbers " + 
71                          "from 1 to " +n + " is " +  
72                          sumOfDigitsFrom1ToN(n)); 
73    } 
74} 
75  
76/*This code is contributed by Nikita Tiwari.*/

برنامه محاسبه مجموع اعداد از ۱ تا n در پایتون ۳

1# PYTHON 3 program to compute sum of digits 
2# in numbers from 1 to n 
3import math 
4  
5# Function to computer sum of digits in  
6# numbers from 1 to n. Comments use example 
7# of 328 to explain the code 
8def sumOfDigitsFrom1ToN( n) : 
9    
10    # base case: if n<10 return sum of 
11    # first n natural numbers 
12    if (n<10) : 
13        return (n*(n+1)/2) 
14   
15    # d = number of digits minus one in n. 
16    # For 328, d is 2 
17    d = (int)(math.log10(n)) 
18   
19    """computing sum of digits from 1 to 10^d-1, 
20    d=1 a[0]=0; 
21    d=2 a[1]=sum of digit from 1 to 9 = 45 
22    d=3 a[2]=sum of digit from 1 to 99 = a[1]*10  
23    + 45*10^1 = 900 
24    d=4 a[3]=sum of digit from 1 to 999 = a[2]*10  
25    + 45*10^2 = 13500"""
26    a = [0] * (d + 1) 
27    a[0] = 0
28    a[1] = 45
29    for i in range(2, d+1) : 
30        a[i] = a[i-1] * 10 + 45 * (int)(math.ceil(math.pow(10,i-1))) 
31   
32    # computing 10^d 
33    p = (int)(math.ceil(math.pow(10, d))) 
34   
35    # Most significant digit (msd) of n, 
36    # For 328, msd is 3 which can be obtained 
37    # using 328/100 
38    msd = n//p 
39   
40    """EXPLANATION FOR FIRST and SECOND TERMS IN 
41    BELOW LINE OF CODE 
42    First two terms compute sum of digits from 1 to 299 
43    (sum of digits in range 1-99 stored in a[d]) + 
44    (sum of digits in range 100-199, can be calculated  
45    as 1*100 + a[d]. (sum of digits in range 200-299, 
46    can be calculated as 2*100 + a[d] 
47    The above sum can be written as 3*a[d] + (1+2)*100 
48   
49    EXPLANATION FOR THIRD AND FOURTH TERMS IN BELOW 
50    LINE OF CODE 
51    The last two terms compute sum of digits in number 
52    from 300 to 328. The third term adds 3*29 to sum 
53    as digit 3 occurs in all numbers from 300 to 328. 
54    The fourth term recursively calls for 28"""
55    return (int)(msd * a[d] + (msd*(msd-1) // 2) * p +  
56           msd * (1 + n % p) + sumOfDigitsFrom1ToN(n % p)) 
57  
58# Driver Program 
59n = 328
60print("Sum of digits in numbers from 1 to",  
61      n ,"is",sumOfDigitsFrom1ToN(n)) 
62  
63  
64# This code is contributed by Nikita Tiwari.

برنامه محاسبه مجموع اعداد از ۱ تا n در #C

1// C# program to compute sum of digits  
2// in numbers from 1 to n 
3  
4using System; 
5  
6public class GFG { 
7      
8    // Function to computer sum of digits in  
9    // numbers from 1 to n. Comments use  
10    // example of 328 to explain the code 
11    static int sumOfDigitsFrom1ToN(int n) 
12    { 
13          
14        // base case: if n<10 return sum of 
15        // first n natural numbers 
16        if (n < 10) 
17            return (n * (n + 1) / 2); 
18      
19        // d = number of digits minus one in 
20        // n. For 328, d is 2 
21        int d = (int)(Math.Log(n) / Math.Log(10)); 
22      
23        // computing sum of digits from 1 to 10^d-1, 
24        // d=1 a[0]=0; 
25        // d=2 a[1]=sum of digit from 1 to 9 = 45 
26        // d=3 a[2]=sum of digit from 1 to 99 =  
27        // a[1]*10 + 45*10^1 = 900 
28        // d=4 a[3]=sum of digit from 1 to 999 = 
29        // a[2]*10 + 45*10^2 = 13500 
30        int[] a = new int[d+1]; 
31        a[0] = 0; a[1] = 45; 
32          
33        for (int i = 2; i <= d; i++) 
34            a[i] = a[i-1] * 10 + 45 *  
35                (int)(Math.Ceiling(Math.Pow(10, i-1))); 
36      
37        // computing 10^d 
38        int p = (int)(Math.Ceiling(Math.Pow(10, d))); 
39      
40        // Most significant digit (msd) of n, 
41        // For 328, msd is 3 which can be obtained 
42        // using 328/100 
43        int msd = n / p; 
44      
45        // EXPLANATION FOR FIRST and SECOND TERMS IN 
46        // BELOW LINE OF CODE 
47        // First two terms compute sum of digits from 
48        // 1 to 299  
49        // (sum of digits in range 1-99 stored in a[d]) + 
50        // (sum of digits in range 100-199, can be  
51        // calculated as 1*100 + a[d] 
52        // (sum of digits in range 200-299, can be  
53        // calculated as 2*100 + a[d] 
54        // The above sum can be written as 3*a[d] +  
55        // (1+2)*100 
56      
57        // EXPLANATION FOR THIRD AND FOURTH TERMS IN  
58        // BELOW LINE OF CODE 
59        // The last two terms compute sum of digits in  
60        // number from 300 to 328. The third term adds 
61        // 3*29 to sum as digit 3 occurs in all numbers  
62        // from 300 to 328. The fourth term recursively 
63        // calls for 28 
64        return (msd * a[d] + (msd * (msd - 1) / 2) * p +  
65            msd * (1 + n % p) + sumOfDigitsFrom1ToN(n % p)); 
66    } 
67      
68    // Driver Program 
69    public static void Main() 
70    { 
71        int n = 328; 
72        Console.WriteLine("Sum of digits in numbers " + 
73                             "from 1 to " +n + " is " +  
74                               sumOfDigitsFrom1ToN(n)); 
75    } 
76} 
77  
78// This code is contributed by shiv_bhakt.

برنامه محاسبه مجموع اعداد از ۱ تا n در PHP

1<?php 
2// PHP program to compute sum of digits  
3// in numbers from 1 to n 
4  
5// Function to computer sum of digits in  
6// numbers from 1 to n. Comments use  
7// example of 328 to explain the code 
8function sumOfDigitsFrom1ToN($n) 
9{ 
10    // base case: if n<10 return sum of 
11    // first n natural numbers 
12    if ($n < 10) 
13    return ($n * ($n + 1) / 2); 
14  
15    // d = number of digits minus one in 
16    // n. For 328, d is 2 
17    $d = (int)(log10($n)); 
18  
19    // computing sum of digits from 1  
20    // to 10^d-1, d=1 a[0]=0; 
21    // d=2 a[1]=sum of digit from 1 to 9 = 45 
22    // d=3 a[2]=sum of digit from 1 to 99 =  
23    // a[1]*10 + 45*10^1 = 900 
24    // d=4 a[3]=sum of digit from 1 to 999 = 
25    // a[2]*10 + 45*10^2 = 13500 
26    $a[$d + 1] = array(); 
27    $a[0] = 0; 
28    $a[1] = 45; 
29    for ($i = 2; $i <= $d; $i++) 
30        $a[$i] = $a[$i - 1] * 10 + 45 *  
31                 (int)(ceil(pow(10, $i - 1))); 
32  
33    // computing 10^d 
34    $p = (int)(ceil(pow(10, $d))); 
35  
36    // Most significant digit (msd) of n, 
37    // For 328, msd is 3 which can be obtained 
38    // using 328/100 
39    $msd = (int)($n / $p); 
40  
41    // EXPLANATION FOR FIRST and SECOND  
42    // TERMS IN BELOW LINE OF CODE 
43    // First two terms compute sum of  
44    // digits from 1 to 299  
45    // (sum of digits in range 1-99 stored  
46    // in a[d]) + (sum of digits in range  
47    // 100-199, can be calculated as 1*100 + a[d] 
48    // (sum of digits in range 200-299,  
49    // can be calculated as 2*100 + a[d] 
50    // The above sum can be written as  
51    // 3*a[d] + (1+2)*100 
52  
53    // EXPLANATION FOR THIRD AND FOURTH  
54    // TERMS IN BELOW LINE OF CODE 
55    // The last two terms compute sum of digits in  
56    // number from 300 to 328. The third term adds 
57    // 3*29 to sum as digit 3 occurs in all numbers  
58    // from 300 to 328. The fourth term recursively 
59    // calls for 28 
60    return ($msd * $a[$d] + ($msd * (int)($msd - 1) / 2) * $p +  
61            $msd * (1 + $n % $p) + sumOfDigitsFrom1ToN($n % $p)); 
62} 
63  
64// Driver Code 
65$n = 328; 
66echo ("Sum of digits in numbers " ), 
67      "from 1 to " , $n , " is ",  
68       sumOfDigitsFrom1ToN($n); 
69  
70// This code is contributed by Sachin 
71?>

خروجی

خروجی قطعه کد بالا برای n = 328 به صورت زیر است.

Sum of digits in numbers from 1 to 328 is 3241

الگوریتم کارآمد، دارای یک مزیت دیگر نیز هست. بر اساس این مزیت، تنها یک بار نیاز به محاسبه []a است، حتی وقتی که چندین ورودی وجود داشته باشد.

روش سوم محاسبه مجموع ارقام از ۱ تا n

پیاده‌سازی بالا، پیچیدگی زمانی از مرتبه (O(d2 دارد، زیرا هر فراخوانی بازگشتی، آرایه []dp را یکبار دیگر محاسبه می‌کند. اولین فراخوانی، (O(d را می‌گیرد، دومین فراخوانی (O(d-1 را می‌گیرد، سومین فراخوانی (O(d-2 را می‌گیرد و به همین صورت.

نیازی به محاسبه آرایه []dp در هر فراخوانی بازگشتی نیست. در زیر، پیاده‌سازی اصلاح شده که از مرتبه (O(d است در زبان‌های #C و جاوا ارائه شده است. در اینجا، d تعداد ارقام عدد ورودی است.

برنامه بهینه محاسبه مجموع اعداد از ۱ تا n در جاوا

1// JAVA program to compute sum of digits  
2// in numbers from 1 to n  
3import java.io.*;  
4import java.math.*;  
5  
6class GFG{  
7      
8    // Function to computer sum of digits in  
9    // numbers from 1 to n  
10    static int sumOfDigitsFrom1ToN(int n)  
11    { 
12        int d = (int)(Math.log10(n)); 
13        int a[] = new int[d+1];  
14        a[0] = 0; a[1] = 45;  
15        for (int i = 2; i <= d; i++)  
16            a[i] = a[i-1] * 10 + 45 *  
17                (int)(Math.ceil(Math.pow(10, i-1)));  
18      
19        return sumOfDigitsFrom1ToNUtil(n, a); 
20    } 
21     
22    static int sumOfDigitsFrom1ToNUtil(int n, int a[])  
23    { 
24        if (n < 10)  
25            return (n * (n + 1) / 2); 
26        
27        int d = (int)(Math.log10(n)); 
28        int p = (int)(Math.ceil(Math.pow(10, d)));  
29        int msd = n / p;  
30        return (msd * a[d] + (msd * (msd - 1) / 2) * p +  
31            msd * (1 + n % p) + sumOfDigitsFrom1ToNUtil(n % p, a));  
32    }  
33      
34    // Driver Program  
35    public static void main(String args[])  
36    {  
37        int n = 328;  
38        System.out.println("Sum of digits in numbers " +  
39                        "from 1 to " +n + " is " +  
40                        sumOfDigitsFrom1ToN(n));  
41    }  
42}  
43  
44/*This code is contributed by Narendra Jha.*/

برنامه بهینه محاسبه مجموع اعداد از ۱ تا n در #C

1// C# program to compute sum of digits  
2// in numbers from 1 to n  
3using System; 
4  
5class GFG 
6{  
7      
8    // Function to computer sum of digits in  
9    // numbers from 1 to n  
10    static int sumOfDigitsFrom1ToN(int n)  
11    { 
12        int d = (int)(Math.Log10(n)); 
13        int []a = new int[d+1];  
14        a[0] = 0; a[1] = 45;  
15        for (int i = 2; i <= d; i++)  
16            a[i] = a[i-1] * 10 + 45 *  
17                (int)(Math.Ceiling(Math.Pow(10, i-1)));  
18      
19        return sumOfDigitsFrom1ToNUtil(n, a); 
20    } 
21      
22    static int sumOfDigitsFrom1ToNUtil(int n, int []a)  
23    { 
24        if (n < 10)  
25            return (n * (n + 1) / 2); 
26          
27        int d = (int)(Math.Log10(n)); 
28        int p = (int)(Math.Ceiling(Math.Pow(10, d)));  
29        int msd = n / p;  
30        return (msd * a[d] + (msd * (msd - 1) / 2) * p +  
31            msd * (1 + n % p) + sumOfDigitsFrom1ToNUtil(n % p, a));  
32    }  
33      
34    // Driver code  
35    public static void Main(String []args)  
36    {  
37        int n = 328;  
38        Console.WriteLine("Sum of digits in numbers " +  
39                        "from 1 to " +n + " is " +  
40                        sumOfDigitsFrom1ToN(n));  
41    }  
42}  
43  
44// This code contributed by Rajput-Ji

خروجی

Sum of digits in numbers from 1 to 328 is 3241

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۱۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
GeeksforGeeks
۳ دیدگاه برای «برنامه محاسبه مجموع اعداد از ۱ تا n — راهنمای کاربردی»

مجموع وتعداد یک عددچندرقمی اگه امکانش هست روبنویسید

سلام خواهشن زبان برنامه نویسی فرترن هم بزارید

سلام امکان داره دستور مجموع اعداد یک تا n در برنامه ی متلب رو هم بنویسید؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *