C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

シリーズ1+22 + 333 + 4444+...の合計をC++でn個まで検索


この問題では、整数値Nが与えられます。私たちのタスクはシリーズ1 + 22 + 333 + 4444 +55555...最大n項の合計を見つけることです

問題を理解するために例を見てみましょう

Input : N = 4
Output : 4800

説明

1 + 22 + 333 + 4444 = 4800

ソリューションアプローチ

この問題を解決する簡単な方法は、級数の一般項を見つけてから、n項までの合計を見つけることです。また、数式を使用して合計を計算すると、O(1)までの時間が短縮されます。

シリーズは、

1 + 22 + 333 + 4444 + 55555 ...

級数の合計は、次のように書き直すことができます。

$ \ mathrm {Sum} \:=\:1 ^ *(\ frac {10 ^ 1-1} {9})\:+ \:2 ^ *(\ frac {10 ^ 1-1} {9}) \:+ \:3 ^ *(\ frac {10 ^ 1-1} {9})\ dotsm $

共通の1/9を取ると、合計は次のようになります。

$ \ mathrm {Sum} \:=\:1/9 ^ * \ lbrace(1 ^ * 10 ^ 1-1)\:+ \:(2 ^ * 10 ^ 2-1)\:+ \ :( 3 ^ * 10 ^ 3-1)\:+ \:\ dotsm(n ^ * 10 ^ 1-n)\ rbrace $

$ \ mathrm {Sum} \:=\:1/9 ^ {*} \ lbrace1 ^ * 10 ^ 1 \:+ \:2 ^ * 10 ^ 2 \:+ \:3 ^ * 10 ^ 3 \:+ \:\ dotsm + n ^ * 10 ^ n \:-\ :( 1 + 2 + 3 + \ dotsm \:n)\ rbrace $

$ \ mathrm {Sum} \:=\:1/9 ^ {*} \ lbrace(1 ^ * 10 ^ 1 \:+ \:2 ^ * 10 ^ 2 \:+ \:3 ^ * 10 ^ 3 \ :+ \:\ dotsm + n ^ * 10 ^ n)\:-\:1/2(n ^ *(n + 1))\ rbrace $

用語(1 * 10 1 + 2 * 10 2 + 3 * 10 3 + ... + n * 10 n )シリーズの一般式を微分することで解くことができます

1 + x + x 2 + x 3 + ... n * x n

したがって、用語(1 * 10 1 + 2 * 10 2 + 3 * 10 3 + ... + n * 10 n )は、

と書き直すことができます

$ \ frac {n ^ *(10 ^ {n + 2})-(n + 1)*(10 ^ {n + 1})+ 10} {81} $

合計式に戻す

$ \ mathrm {Sum} \:=\:1/9 ^ * \ lbrace(\ frac {n ^ *(10 ^ {n + 2})-(n + 1)*(10 ^ {n + 1}) +10)} {81} \:-\:1/2(n ^ *(n + 1))\ rbrace $

$ \ mathrm {Sum} \:=\:\ frac {1} {1458} * \ lbrace2 ^ *(n *(10 ^ {n + 2})-(n + 1)*(10 ^ {n + 1 })+ 10)-81 ^ * n ^ *(n + 1)\ rbrace $

$ \ mathrm {Sum} \:=\:\ frac {1} {1458} * \ lbrace2 ^ *(n *(10 ^ {n + 2})-(n + 1)*(10 ^ {n + 1 })+ 10)-81 ^ * n ^ *(n + 1)\ rbrace $

$ \ mathrm {Sum} \:=\:\ frac {1} {1458} * \ lbrace(n ^ *(2 ^ * 10 ^ {n + 1} -2 ^ * 10 ^ {n + 1})- 2 ^ * 10 ^ {n + 1})\:+ \:20 \:-\:81 ^ * n ^ 2-81n \ rbrace $

$ \ mathrm {Sum} \:=\:\ frac {1} {1458} * \ lbrace10 ^ {n + 1 *}(20n-2n-2)-81n ^ 2-81n + 20 \ rbrace $

>

$ \ mathrm {Sum} \:=\:\ frac {1} {1458} * \ lbrace10 ^ {n + 1 *}(18n-2)-81n ^ 2-81n + 20 \ rbrace $

ソリューションの動作を説明するプログラム

#include<iostream>
#include<math.h>
using namespace std;
int calcSumNTerms(int n) {
   return ( ( (18*n - 2)*(pow(10, n+1)) - 81*n*n - 81*n + 20 )/1458 );
}
int main() {
   int n = 5;
   cout<<"The sum of series upto n terms is "<<calcSumNTerms(n);
   return 0;
}

出力

The sum of series upto n terms is 60355

  1. C++で調和級数の合計を見つけるプログラム

    この問題では、a、d、nの3つの数が与えられます。私たちのタスクは、C++で調和級数の合計を見つけるプログラムを作成することです。 調和数列 は、その逆数が等差数列になる級数です。つまり調和数列A1、A2、A3 .. Anの場合、等差数列1 / A1、1 / A2、1/A3があります。 したがって、一般的なHPは 1/a, 1/(a+d), 1/(a+2d), … 1/(a + nd) ここで、1/aは最初の用語です。そして、dはreversedAPの一般的な違いです。 問題の説明 −ここでは、最初の項a、共通の差d、および項の数nが与えられます。 HPについては、その合

  2. シリーズ23+45+75+…..最大N項の合計を求めるC++プログラム

    このチュートリアルでは、与えられたシリーズの合計を見つけるプログラムについて説明します23+45+75+…..最大N項。 このために、Nの値が与えられます。私たちのタスクは、最初の項から始まるすべての項を合計して、与えられた系列の合計を見つけることです。 これを解いた後、級数の合計の式を取得します; Sn =(2n(n + 1)(4n + 17)+ 54n)/ 6 例 #include <iostream> using namespace std; //calculating the sum of the series int calc_sum(int N) { &n