给定正整数N ,任务是查找前N个正整数的级联总数。
例子:
Input: N = 10
Output: 11
Explanation:
The number formed is 12345678910.
Hence, the total number of digits = 11
Input: N = 20
Output: 31
Explanation:
The number formed is 1234567891011121314151617181920
Hence, the total number of digits = 31
方法:让我们通过示例进行观察。
- 令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