เราได้รับตัวเลขจำนวนเต็มสองตัว สมมติว่า num1 และ num2 และภารกิจคือการหาร num1 ด้วย num2 และคำนวณการนับหลักต่อจากทศนิยมในการหารตัวเลขที่กำหนดเหล่านี้
ตัวอย่าง
Input − num1 = 2, num2 = 5 Output − count is 1
คำอธิบาย − เมื่อเราหาร 2 กับ 5 เช่น ? =0.4 ดังนั้นตัวเลขหลังทศนิยมจึงเป็น 1 จึงนับเป็น 1
Input − num1 = 2, num2 = 0 Output − Floating point exception (core dumped)
คำอธิบาย − เมื่อเราหารตัวเลขใดๆ ด้วย 0 มันจะส่งคืนข้อผิดพลาดและยุติโปรแกรมอย่างผิดปกติ
Input − num1 = 2, num2 = 3 Output − Infinite
คำอธิบาย − เมื่อเราหาร 2 กับ 3 เช่น 2/3 =0.666... ตัวเลขหลังทศนิยมไม่มีที่สิ้นสุด ดังนั้น เราจะพิมพ์ออกมาเป็นอนันต์
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนตัวแปรสองตัว สมมุติว่า num1 และ num2
-
สร้างการนับตัวแปรเพื่อเก็บการนับจำนวนทศนิยมและเริ่มต้นด้วย 0
-
สร้างตัวแปร um ของประเภท unordered_map
-
เริ่มวนซ้ำในขณะที่ num1%num2 !=0
-
ภายในลูป ตั้งค่า num1 ด้วย num1%num2
-
เพิ่มมูลค่าการนับขึ้น 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