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

C++で1/nの10進値で期間の長さを検索します


数nがあるとします。期間の長さを1/nの10進値で見つける必要があります。したがって、nの値が7の場合、1/7=0です。142857 142857…太字のその部分が繰り返されています。したがって、ここでの期間の長さは6です。

数値nの場合、出力にn個の異なる剰余が存在する可能性がありますが、一部の初期剰余は繰り返されないため、期間は最初の剰余から開始されない場合があります。したがって、期間の剰余が選択されていることを確認し、(n + 1)番目の剰余から開始して、次の出現を探し始める必要があります。 (n + 1)番目の剰余と次の出現の間の距離は、期間の長さです。

#include<iostream>
using namespace std;
int periodLength(int n) {
   int remainder = 1;
   int length = 0;
   for (int i = 1; i <= n+1; i++)
   remainder = (10*remainder) % n;
   int d = remainder;
   do {
      remainder = (10*remainder) % n;
      length++;
   } while(remainder != d);
      return length;
}
int main() {
   int n = 7;
   cout << "Period length of 1/"<<n<<" is: " << periodLength(n) << endl;
}

出力

Period length of 1/7 is: 6

  1. C++のリンクリストでループの長さを見つける

    この問題では、ループを含む可能性のあるリンクリストが表示されます。私たちのタスクは、リンクリストでループの長さを見つけることです。 問題の説明: ループが含まれている場合はループ内のノード数をカウントする必要があります。それ以外の場合は-1を返します。 問題を理解するために例を見てみましょう。 入力: リンクリスト: 出力: 8 ソリューションアプローチ この問題を解決するには、まずリンクリストにループが含まれているかどうかを確認する必要があります。これを確認するためのアプローチは、フロイドの循環検出アルゴリズムを使用することです。 フロイドの循環検出アルゴリズム

  2. C++で左下のツリー値を検索

    二分木があるとします。そのツリーの最後の行の左端の値を見つける必要があります。したがって、ツリーが次のような場合- 最後の行が[7、4]であり、左端の要素が7であるため、出力は7になります。 これを解決するには、次の手順に従います- 最初にansとlvl変数を0として定義します solve()と呼ばれる1つのメソッドを定義します。これはツリーノードを取り、レベルは最初は0です。これは次のように機能します- ノードがnullの場合は、を返します。 lvlの場合、ans:=ノードの値およびlvl:=level 解決(ノードの左側、レベル+ 1)