在C ++中对小数点后的位数进行计数

我们给了两个整数,分别是num1和num2,任务是将num1除以num2,并在将这些给定的数字除以十进制后计算位数。

例如

Input − num1 = 2, num2 = 5Output − count is 1

解释-当我们将2除以5即?= 0.4,因此十进制后的数字为1,因此计数为1。

Input − num1 = 2, num2 = 0Output − Floating point exception (core dumped)

解释-当我们将任何数字除以0时,将返回错误并异常终止程序。

Input − num1 = 2, num2 = 3Output − Infinite

解释-当我们将2除以3即2/3 = 0.666 ...时,十进制后的数字是无限的,因此我们将打印无限。

以下程序中使用的方法如下

  • 输入两个变量,比如num1和num2

  • 创建一个变量count以存储十进制数的计数并将其初始化为0

  • 创建unumed_map类型的变量um

  • num1%num2!= 0时开始循环

  • 在循环内,将num1设置为num1%num2

  • 将count的值增加1

  • 检查um.find(num1)!= um.end()然后返回-1

  • 在循环外,返回计数值。

  • 打印结果。

示例

#include <iostream>
#include <unordered_map>
using namespace std;
int countdigits(int x, int y){
   int result = 0; // result variable
   unordered_map<int, int> mymap;
   // calculating remainder
   while (x % y != 0){
      x = x % y;
      result++;
      if (mymap.find(x) != mymap.end()){
         return -1;
      }
      mymap[x] = 1;
      x = x * 10;
   }
   return result;
}
int main(){
   int res = countdigits(2, 5);
   (res == -1)? cout << "count is Infinty" : cout <<"count is "<<res;
   return 0;
}

输出结果

如果运行上面的代码,我们将获得以下输出-

count is 1