เราได้รับตัวเลขจำนวนเต็มสองตัว สมมติว่า 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