📌  相关文章
📜  连接前N个正整数后的位数计数

📅  最后修改于: 2021-05-05 01:15:58             🧑  作者: Mango

给定正整数N ,任务是查找前N个正整数的级联总数。

例子:

方法:让我们通过示例进行观察。

  • 令N =13。因此,在一个人的1到13之间的所有数字中出现的数字分别是1、2、3、4、5、6、7、8、9、0、1、2、3。
  • 同样,十位数为1、1、1、1。
  • 因此,从1到13的总位数为13(13 – 0)。
  • 同样,十位数总共为4(13 – 9)。
  • 现在,让我们看看另一个数字以了解模式。令N =234。因此,单位位置的数字是1(24次),2(24次),3(24次),4(24次),5(23次),6(23次),7 (23次),8(23次),9(23次),0(23次)。因此,23 * 6 + 24 * 4 = 234。
  • 同样,十位数是234 – 9 = 225,因为从1到234,只有1 – 9是个位数。
  • 最后,百分位数的位数是234 – 99 = 225(从1到234),只有1 – 9是一位数字,而1 – 99是两位数字。
  • 因此,连接时形成的总位数为234(234 – 1 + 1)+ 225(234 – 10 + 1)+ 135(234 – 100 + 1)= 594。
  • 因此,我们的想法是减去0、9、99、999…。从N获得每个位置的位数,所有这些的总和是必需的答案。

    概括以上模式后,将生成以下公式:

下面是上述方法的实现:

C++
// C++ program to find the number of
// digits after concatenating the
// first N positive integers
  
#include 
#include 
using namespace std;
  
// Function to find the number of
// digits after concatenating the
// first N positive integers
void numberOfDigits(int N)
{
    int nod = floor(log10(N) + 1);
    int toDecrease
        = (pow(10, nod) - 1) / 9;
    cout << (N + 1) * nod - toDecrease
         << endl;
}
  
// Driver code
int main()
{
    int N = 13;
    numberOfDigits(N);
  
    return 0;
}


Java
// Java program to find the number of
// digits after concatenating the
// first N positive integers
class GFG{ 
  
// Function to find the number of
// digits after concatenating the
// first N positive integers
static void numberOfDigits(int N)
{
    int nod = (int)Math.floor(Math.log10(N) + 1);
    int toDecrease = (int)(Math.pow(10, nod) - 1) / 9;
      
    System.out.print((N + 1) * nod - toDecrease);
}
  
// Driver code
public static void main(String[] args) 
{ 
    int N = 13;
    numberOfDigits(N);
}
}
  
// This code is contributed by shivanisinghss2110


Python3
# Python3 program to find the number 
# of digits after concatenating the
# first N positive integers
from math import log10, floor
  
# Function to find the number of
# digits after concatenating the
# first N positive integers
def numberOfDigits(N):
      
    nod = floor(log10(N) + 1);
    toDecrease = (pow(10, nod) - 1) // 9
      
    print((N + 1) * nod - toDecrease)
  
# Driver code
if __name__ == '__main__':
      
    N = 13
      
    numberOfDigits(N)
      
# This code is contributed by mohit kumar 29


C#
// C# program to find the number of
// digits after concatenating the
// first N positive integers
using System;
class GFG{ 
  
// Function to find the number of
// digits after concatenating the
// first N positive integers
static void numberOfDigits(int N)
{
    int nod = (int)Math.Floor(Math.Log10(N) + 1);
    int toDecrease = (int)(Math.Pow(10, nod) - 1) / 9;
      
    Console.Write((N + 1) * nod - toDecrease);
}
  
// Driver code
public static void Main() 
{ 
    int N = 13;
    numberOfDigits(N);
}
}
  
// This code is contributed by Nidhi_Biet


输出:
17