logo

숫자 n이 주어지면 n^n의 처음 k자리를 찾습니다.

숫자 n이 주어지면 n의 처음 k자리 숫자를 찾습니다.N여기서 k는 n의 자릿수보다 작은 값입니다.N 
예:
 

   Input :    n = 10 k = 2    Output :   10 The first 2 digits in 1010 are 10.    Input :    n = 144 k = 6    Output :   637087    Input:    n = 1250 k = 5    Output:    13725 


 


이 문제는 다음 두 가지 방법으로 해결될 수 있습니다.
방법 1(간단): 실제 값을 계산한 다음 필요한 답을 얻을 때까지 10으로 나누는 순진한 방법입니다. 그러나 이 방법은 오버플로를 발생시키므로 n = 15보다 큰 입력을 받을 수 없습니다. 
 



C++
// C++ program to find the first k digits of n^n #include    using namespace std; // function that manually calculates n^n and then // removes digits until k digits remain unsigned long long firstkdigits(int n int k) {  unsigned long long product = 1;  for (int i = 0 ; i < n ; i++)  product *= n;  // loop will terminate when there are only  // k digits left  while ((int)(product / pow(10 k)) != 0)  product = product / 10;  return product; } //driver function int main() {  int n = 15;  int k = 4;  cout << firstkdigits(n k);  return 0; } 
Java
// Java program to find the first k digits of n^n public class Digits {  // function that manually calculates n^n and then  // removes digits until k digits remain  static long firstkdigits(int n int k)  {  long product = 1;  for (int i = 0 ; i < n ; i++)  product *= n;    // loop will terminate when there are only  // k digits left  while ((int)(product / Math.pow(10 k)) != 0)  product = product / 10;  return product;  }    public static void main(String[] args)  {  int n = 15;  int k = 4;  System.out.println(firstkdigits(n k));  } } //This code is contributed by Saket Kumar 
Python 3
# Python 3 program to find the  # first k digits of n^n # function that manually calculates  # n^n and then removes digits until # k digits remain def firstkdigits(n k): product = 1 for i in range(n ): product *= n # loop will terminate when there  # are only k digits left while ((product // pow(10 k)) != 0): product = product // 10 return product # Driver Code n = 15 k = 4 print(firstkdigits(n k)) # This code is contributed  # by ChitraNayal 
C#
// C# program to find the // first k digits of n^n using System; class Digits {  // function that manually calculates  // n^n and then removes digits until  // k digits remain  static long firstkdigits(int n int k)  {  long product = 1;  for (int i = 0 ; i < n ; i++)  product *= n;    // loop will terminate when there   // are only k digits left  while ((int)(product / Math.Pow(10 k)) != 0)  product = product / 10;    return product;  }    // Driver code  public static void Main()  {  int n = 15;  int k = 4;  Console.Write(firstkdigits(n k));  } } // This code is contributed by nitin mittal. 
PHP
 // PHP program to find the // first k digits of n^n // function that manually  // calculates n^n and then // removes digits until k // digits remain function firstkdigits($n $k) { $product = 1; for ($i = 0 ; $i < $n ; $i++) $product *= $n; // loop will terminate when  // there are only k digits left while ((int)($product / pow(10 $k)) != 0) $product = (int) $product / 10; return floor($product); } // Driver Code $n = 15; $k = 4; echo firstkdigits($n $k); // This code is contributed by aj_36 ?> 
JavaScript
<script> // Javascript program to find the first k digits of n^n    // function that manually calculates n^n and then  // removes digits until k digits remain  function firstkdigits(nk)  {  let product = 1;  for (let i = 0 ; i < n ; i++)  product *= n;    // loop will terminate when there are only  // k digits left  while (Math.floor(product / Math.pow(10 k)) != 0)  product = Math.floor(product / 10);  return product;  }    let n = 15;  let k = 4;  document.write(firstkdigits(n k));    // This code is contributed by avanitrachhadiya2155 </script> 

출력 : 
 

자바는 현재 날짜를 가져옵니다
4378


방법 2: 다음 방법은 로그를 사용하여 처음 k 자리를 계산하는 것입니다. 방법과 단계는 아래에 설명되어 있습니다.
 

컴퓨터를 정의하다
  1. 곱 = n이라고 하자N. 방정식의 양쪽에 로그 밑수 10을 취합니다. 로그를 얻습니다10(제품) = 로그10(NN) n*log로 쓸 수도 있습니다.10(N)
  2. 이 예에서는 로그를 얻습니다.10(제품) = 3871.137516. RHS를 3871 + 0.137516으로 분할하여 이제 방정식을 로그로 작성할 수 있습니다.10(곱) = 3871 + 0.137516
  3. 밑수 10으로 양쪽을 올리고 위의 예를 사용하여 product = 10을 얻습니다.3871x 100.137516. 103871소수점만 이동하므로 처음 k 자리에는 차이가 없습니다. 우리는 다음 부분 10에 관심이 있습니다0.137516이는 처음 몇 자리 숫자를 결정하기 때문입니다. 
    이 경우 값은 10입니다.0.1375161.37251입니다.
  4. 따라서 필요한 처음 5자리 숫자는 13725입니다.


 

C++
//C++ program to generate first k digits of // n ^ n #include    using namespace std; // function to calculate first k digits // of n^n long long firstkdigits(int nint k) {  //take log10 of n^n. log10(n^n) = n*log10(n)  long double product = n * log10(n);  // We now try to separate the decimal and  // integral part of the /product. The floor  // function returns the smallest integer  // less than or equal to the argument. So in  // this case product - floor(product) will  // give us the decimal part of product  long double decimal_part = product - floor(product);  // we now exponentiate this back by raising 10  // to the power of decimal part  decimal_part = pow(10 decimal_part);  // We now try to find the power of 10 by which  // we will have to multiply the decimal part to  // obtain our final answer  long long digits = pow(10 k - 1) i = 0;  return decimal_part * digits; } // driver function int main() {  int n = 1450;  int k = 6;  cout << firstkdigits(n k);  return 0; } 
Java
// Java program to find the first k digits of n^n import java.util.*; import java.lang.*; import java.io.*; class KDigitSquare {  /* function that manually calculates   n^n and then removes digits until   k digits remain */  public static long firstkdigits(int n int k)  {  //take log10 of n^n.   // log10(n^n) = n*log10(n)  double product = n * Math.log10(n);    /* We will now try to separate the decimal   and integral part of the /product. The   floor function returns the smallest integer  less than or equal to the argument. So in  this case product - floor(product) will  give us the decimal part of product */  double decimal_part = product - Math.floor(product);    // we will now exponentiate this back by   // raising 10 to the power of decimal part  decimal_part = Math.pow(10 decimal_part);    /* We now try to find the power of 10 by   which we will have to multiply the decimal   part to obtain our final answer*/  double digits = Math.pow(10 k - 1) i = 0;    return ((long)(decimal_part * digits));  }  // driver function  public static void main (String[] args)  {  int n = 1450;  int k = 6;  System.out.println(firstkdigits(nk));  } } /* This code is contributed by Mr. Somesh Awasthi */ 
Python3
# Python3 program to generate k digits of n ^ n  import math # function to calculate first k digits of n^n  def firstkdigits(n k): # take log10 of n^n. # log10(n^n) = n*log10(n) product = n * math.log(n 10); # We now try to separate the decimal  # and integral part of the /product. # The floor function returns the smallest  # integer less than or equal to the argument.  # So in this case product - floor(product)  # will give us the decimal part of product decimal_part = product - math.floor(product); # we now exponentiate this back # by raising 10 to the power of # decimal part decimal_part = pow(10 decimal_part); # We now try to find the power of 10 by  # which we will have to multiply the  # decimal part to obtain our final answer digits = pow(10 k - 1); return math.floor(decimal_part * digits); # Driver Code  n = 1450; k = 6; print(firstkdigits(n k)); # This code is contributed by mits 
C#
// C# program to find the first k digits of n^n using System; class GFG {    /* function that manually calculates   n^n and then removes digits until   k digits remain */  public static long firstkdigits(int n int k)  {    // take log10 of n^n.   // log10(n^n) = n*log10(n)  double product = n * Math.Log10(n);    /* We will now try to separate the decimal   and integral part of the /product. The   floor function returns the smallest integer  less than or equal to the argument. So in  this case product - floor(product) will  give us the decimal part of product */  double decimal_part = product -  Math.Floor(product);    // we will now exponentiate this back by   // raising 10 to the power of decimal part  decimal_part = Math.Pow(10 decimal_part);    /* We now try to find the power of 10 by   which we will have to multiply the decimal   part to obtain our final answer*/  double digits = Math.Pow(10 k - 1);    return ((long)(decimal_part * digits));  }  // driver function  public static void Main ()  {  int n = 1450;  int k = 6;  Console.Write(firstkdigits(nk));  } } // This code is contributed by nitin mittal 
PHP
 // PHP program to generate  // k digits of n ^ n // function to calculate  // first k digits of n^n function firstkdigits($n $k) { // take log10 of n^n.  // log10(n^n) = n*log10(n) $product = $n * log10($n); // We now try to separate the  // decimal and integral part  // of the /product. The floor  // function returns the smallest  // integer less than or equal to  // the argument. So in this case // product - floor(product) will  // give us the decimal part of product $decimal_part = $product - floor($product); // we now exponentiate this back  // by raising 10 to the power of // decimal part $decimal_part = pow(10 $decimal_part); // We now try to find the power  // of 10 by which we will have  // to multiply the decimal part  // to obtain our final answer $digits = pow(10 $k - 1); $i = 0; return floor($decimal_part * $digits); } // Driver Code $n = 1450; $k = 6; echo firstkdigits($n $k); // This code is contributed by m_kit ?> 
JavaScript
<script> // Javascript program to find the first k digits of n^n    /* function that manually calculates   n^n and then removes digits until   k digits remain */  function firstkdigits(nk)  {  //take log10 of n^n.   // log10(n^n) = n*log10(n)  let product = n * Math.log10(n);    /* We will now try to separate the decimal   and integral part of the /product. The   floor function returns the smallest integer  less than or equal to the argument. So in  this case product - floor(product) will  give us the decimal part of product */  let decimal_part = product - Math.floor(product);    // we will now exponentiate this back by   // raising 10 to the power of decimal part  decimal_part = Math.pow(10 decimal_part);    /* We now try to find the power of 10 by   which we will have to multiply the decimal   part to obtain our final answer*/  let digits = Math.pow(10 k - 1) i = 0;    return (Math.floor(decimal_part * digits));  }    // Driver code  let n = 1450;  let k = 6;  document.write(firstkdigits(n k));    // This code is contributed by rag2127 </script> 

출력 :  
 

962948


이 코드는 일정한 시간에 실행되며 n의 큰 입력 값을 처리할 수 있습니다.
 

퀴즈 만들기