シリーズ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
-
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については、その合
-
シリーズ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