เราได้รับจำนวนเต็มสองตัว ให้เรียกว่า num1 และ num2 และงานคือหาร num1 ด้วย num2 และคำนวณจำนวนหลักหลังจุดทศนิยมเมื่อหารตัวเลขทั้งสองนี้
ตัวอย่าง
อินพุต – num1 = 2, num2 = 5 เอาต์พุต – count is 1
คำอธิบาย – เมื่อเราหาร 2 ด้วย 5 คือ 0.4 หลักหลังจุดทศนิยมคือ 1 ดังนั้น count คือ 1
อินพุต – num1 = 2, num2 = 0 เอาต์พุต – Floating point exception (core dumped)
คำอธิบาย – เมื่อเราหารตัวเลขใดๆ ด้วย 0 จะคืนค่า error และจบโปรแกรมอย่างผิดปกติ
อินพุต – num1 = 2, num2 = 3 เอาต์พุต – Infinite
คำอธิบาย – เมื่อเราหาร 2 ด้วย 3 คือ 0.666... หลักหลังจุดทศนิยมเป็นอันไม่สิ้นสุด ดังนั้นเราจะพิมพ์ infinite
วิธีการที่ใช้ในโปรแกรมด้านล่าง
- รับตัวแปรสองตัว ให้เป็น num1 และ num2
- สร้างตัวแปร count เก็บจำนวนหลักทศนิยม เริ่มต้นที่ 0
- สร้างตัวแปร um ประเภท unordered_map
- เริ่มลูป while num1 % num2 != 0
- ในลูป ตั้งค่า num1 ด้วย num1 % num2
- เพิ่มค่า count ขึ้น 1
- ตรวจสอบ if um.find(num1) != um.end() แล้วคืนค่า -1
- นอกลูป คืนค่าที่อยู่ใน count
- พิมพ์ผลลัพธ์
ตัวอย่าง
#include <iostream>
#include <unordered_map>
using namespace std;
int countdigits(int x, int y){
int result = 0;
unordered_map<int, int> mymap;
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