برنامه محاسبه مجموع اعداد از ۱ تا 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
- تعداد ارقام از ۱ تا n، منهای یکی را پیدا کن. این مقدار را d بنام. (برای ۳۲۸، مقدار d برابر با ۲ است.)
- مجموع ارقام از ۱ تا 10d - 1 را محاسبه کن. این مجموع را w بنام. برای ۳۲۸، مجموع اعداد از ۱ تا ۹۹ را با استفاده از فرمول بالا محاسبه کن. (برای ۳۲۸، مجموع ارقام از ۱ تا ۹۹ با استفاده از فرمول بالا محاسبه میشود.)
- موثرترین رقم (Most significant digit | msd) در n را پیدا کن. (برای ۳۲۸، msd عدد ۳ است.)
- مجموع کل، برابر با مجموع عبارات زیر است.
- مجموع ارقام از ۱ تا «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 محاسبه کرد.)
- در ادامه، پیادهسازی الگوریتم بالا ارائه شده است.
برنامه محاسبه مجموع اعداد از ۱ تا 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
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش برنامهنویسی C++
- مجموعه آموزشهای ریاضیات
- یافتن دور همیلتونی با الگوریتم پس گرد — به زبان ساده
- الگوریتم بازی مار و پله همراه با کد — به زبان ساده
- حل مساله n وزیر با الگوریتم پسگرد (Backtracking) — به زبان ساده
^^
مجموع وتعداد یک عددچندرقمی اگه امکانش هست روبنویسید
سلام خواهشن زبان برنامه نویسی فرترن هم بزارید
سلام امکان داره دستور مجموع اعداد یک تا n در برنامه ی متلب رو هم بنویسید؟