我们给了两个数字A和B。我们需要计算小数点后的位数。如果数字不合理,请打印“ INF”。
例子:
Input : x = 5, y = 3
Output : INF
5/3 = 1.666....
Input : x = 3, y = 6
Output : 1
3/6 = 0.5
这个想法很简单,我们遵循学校划分,一一一一地跟踪余数。如果余数变为0,我们返回小数点后的位数计数。如果其余部分重复,则返回INF。
C++
// CPP program to count digits after dot when a
// number is divided by another.
#include
using namespace std;
int count(int x, int y)
{
int ans = 0; // Initialize result
unordered_map m;
// calculating remainder
while (x % y != 0) {
x = x % y;
ans++;
// if this remainder appeared before then
// the numbers are irrational and would not
// converge to a solution the digits after
// decimal will be infinite
if (m.find(x) != m.end())
return -1;
m[x] = 1;
x = x * 10;
}
return ans;
}
// Driver code
int main()
{
int res = count(1, 2);
(res == -1)? cout << "INF" : cout << res;
cout << endl;
res = count(5, 3);
(res == -1)? cout << "INF" : cout << res;
cout << endl;
res = count(3, 5);
(res == -1)? cout << "INF" : cout << res;
return 0;
}
Java
// Java program to count digits after dot when a
// number is divided by another.
import java.util.*;
class GFG
{
static int count(int x, int y)
{
int ans = 0; // Initialize result
Map m = new HashMap<>();
// calculating remainder
while (x % y != 0)
{
x = x % y;
ans++;
// if this remainder appeared before then
// the numbers are irrational and would not
// converge to a solution the digits after
// decimal will be infinite
if (m.containsKey(x))
return -1;
m.put(x, 1);
x = x * 10;
}
return ans;
}
// Driver code
public static void main(String[] args)
{
int res = count(1, 2);
if((res == -1))
System.out.println("INF");
else
System.out.println(res);
res = count(5, 3);
if((res == -1))
System.out.println("INF");
else
System.out.println(res);
res = count(3, 5);
if((res == -1))
System.out.println("INF");
else
System.out.println(res);
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program to count digits after dot
# when a number is divided by another.
def count(x, y):
ans = 0 # Initialize result
m = dict()
# calculating remainder
while x % y != 0:
x %= y
ans += 1
# if this remainder appeared before then
# the numbers are irrational and would not
# converge to a solution the digits after
# decimal will be infinite
if x in m:
return -1
m[x] = 1
x *= 10
return ans
# Driver Code
if __name__ == "__main__":
res = count(1, 2)
print("INF") if res == -1 else print(res)
res = count(5, 3)
print("INF") if res == -1 else print(res)
res = count(3, 5)
print("INF") if res == -1 else print(res)
# This code is contributed by
# sanjeev2552
C#
// C# program to count digits after dot when a
// number is divided by another.
using System;
using System.Collections.Generic;
class GFG
{
static int count(int x, int y)
{
int ans = 0; // Initialize result
Dictionary m = new Dictionary();
// calculating remainder
while (x % y != 0)
{
x = x % y;
ans++;
// if this remainder appeared before then
// the numbers are irrational and would not
// converge to a solution the digits after
// decimal will be infinite
if (m.ContainsKey(x))
return -1;
m.Add(x, 1);
x = x * 10;
}
return ans;
}
// Driver code
public static void Main(String[] args)
{
int res = count(1, 2);
if((res == -1))
Console.WriteLine("INF");
else
Console.WriteLine(res);
res = count(5, 3);
if((res == -1))
Console.WriteLine("INF");
else
Console.WriteLine(res);
res = count(3, 5);
if((res == -1))
Console.WriteLine("INF");
else
Console.WriteLine(res);
}
}
// This code is contributed by 29AjayKumar
输出:
1
INF
1
时间复杂度: O(N * log(N))
辅助空间: O(N)