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

C++のN番目の桁


無限の整数シーケンスが1つあるとすると、このシーケンスのn番目の桁を見つける必要があります。したがって、入力が11の場合、123456789101112のような数値を配置するかのように、出力は0になるため、11桁目は0になります。

これを解決するには、次の手順に従います-

  • len:=0およびcnt:=9およびstart:=1

  • n> len * cnt

    • n:=n –(len * cnt)

    • cnt:=cnt * 10、start:=start * 10

    • lenを1増やします

  • start:=start +(n --1)/ len

  • s:=文字列として開始

  • return s [(n – 1)mod len]

例(C ++)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   int findNthDigit(int n) {
      lli len = 1;
      lli cnt = 9;
      lli start = 1;
      while(n > len * cnt){
         n -= len * cnt;
         cnt *= 10;
         start *= 10;
         len++;
      }
      start += (n - 1) / len;
      string s = to_string(start);
      return s[(n - 1) % len] - '0';
   }
};
main(){
   Solution ob;
   cout << (ob.findNthDigit(11));
}

入力

11

出力

0

  1. C ++ STLのiswdigit()関数

    C ++ STLでは、iswdigit()関数は、指定されたワイド文字が10進数文字か他の文字かを確認するために使用される組み込み関数です。この関数は、C /C++のcwctypeヘッダーファイルにあります。 10進数の文字は何ですか? 10進数の文字は、0から始まる数値です。つまり、0、1、2、3、4、5、6、7、8、9です。 iswcntrl()関数の構文は次のとおりです int iswdigit() (wint_t c) パラメータ − cは、チェックするワイド文字、wint_tにキャストする文字、またはWEOF(wint_tは整数型)です。 戻り値 −実際にcが10進数の場合

  2. C++で数字kまたはkで割り切れる数字を含むn番目の数値を検索します

    2つの正の整数nとkが与えられ、数字kを含むかkで割り切れるn番目の数を見つける必要があります。 kは[2から9]の範囲になります。したがって、nとkがそれぞれ15と3の場合、出力は33になります。数値として[3、6、9、12、13、15、18、21、23、24、27、30、31、33]各要素に数字k=3またはkによる除算が含まれ、このn番目の数値が33である数値。したがって、出力は33です。 kとkの倍数を含む各数値を確認し、n番目の要素が得られるまで数えます。 例 #include<iostream> using namespace std; bool hasDigit(in