给定两个数字 N 和 K 。任务是找到被 100 整除 K 次的第 N 个最小数。
例子:
Input : N = 12, K = 2
Output : 120000
120000 is divisible by 100 exactly 2 times and
is the 12 th smallest number also.
Input : N = 1000, K = 2
Output : 10010000
方法:
- 首先,找出能被 100 整除 K 次的最小数。那是 1 之后的 2*K 个 0,因为 100 只有两个 0。
- 要找到第 N 个最小的数字,请将 N 与我们在添加 2*k 个 0 后得到的前一个数字相乘。
- 考虑 N 可被 100 整除的情况,就好像我们将 N 与前一个数字相乘,那么新数字将有超过 (2*k + 1) 个尾随 0,这意味着它将被 100 整除 K 次以上。
- 将该数字乘以 (N + 1)。使用字符串作为 N 和 K 可能非常大,不适合整数限制。
下面是上述方法的实现:
C++
// C++ implementation of above approach
#include
using namespace std;
// Function to find the Nth smallest number
string find_number(int N, int K)
{
string r;
// If N is divisible by 100 then we
// multiply N + 1 otherwise, it will be
// divisible by 100 more than K times
if (N % 100 == 0) {
N += 1;
// convert integer to string
r = to_string(N);
}
// if N is not divisible by 100
else {
// convert integer to string
r = to_string(N);
}
// add 2*K 0's at the end to be divisible
// by 100 exactly K times
for (int i = 1; i <= K; i++)
r += "00";
return r;
}
// Driver Code
int main()
{
int N = 1000, K = 2;
string ans = find_number(N, K);
cout << ans << "\n";
return 0;
}
Java
// Java implementation of above approach
import java.util.*;
class GFG
{
// Function to find the Nth smallest number
static String find_number(int N, int K)
{
String r;
// If N is divisible by 100 then we
// multiply N + 1 otherwise, it will be
// divisible by 100 more than K times
if (N % 100 == 0)
{
N += 1;
// convert integer to string
r = String.valueOf(N);
}
// if N is not divisible by 100
else
{
// convert integer to string
r = String.valueOf(N);
}
// add 2*K 0's at the end to be divisible
// by 100 exactly K times
for (int i = 1; i <= K; i++)
r += "00";
return r;
}
// Driver Code
public static void main(String[] args)
{
int N = 1000, K = 2;
String ans = find_number(N, K);
System.out.println(ans);
}
}
/* This code is contributed by PrinciRaj1992 */
Python3
# Python3 implementation of above approach
# Function to find the Nth smallest number
def find_number(N, K):
r = ""
# If N is divisible by 100 then we
# multiply N + 1 otherwise, it will be
# divisible by 100 more than K times
if (N % 100 == 0):
N += 1;
# convert integer to string
r = str(N)
# if N is not divisible by 100
else:
# convert integer to string
r = str(N)
# add 2*K 0's at the end to be divisible
# by 100 exactly K times
for i in range(1, K + 1):
r += "00"
return r
# Driver Code
N = 1000
K = 2;
ans = find_number(N, K)
print(ans)
# This code is contributed by Mohit Kumar
C#
// C# implementation of the approach
using System;
class GFG
{
// Function to find the Nth smallest number
static String find_number(int N, int K)
{
String r;
// If N is divisible by 100 then we
// multiply N + 1 otherwise, it will be
// divisible by 100 more than K times
if (N % 100 == 0)
{
N += 1;
// convert integer to string
r = N.ToString();
}
// if N is not divisible by 100
else
{
// convert integer to string
r = N.ToString();
}
// add 2*K 0's at the end to be divisible
// by 100 exactly K times
for (int i = 1; i <= K; i++)
r += "00";
return r;
}
// Driver Code
public static void Main(String[] args)
{
int N = 1000, K = 2;
String ans = find_number(N, K);
Console.WriteLine(ans);
}
}
// This code is contributed by Rajput-Ji
Javascript
输出:
10010000
时间复杂度: O(K)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。