ได้รับตัวเลข num งานคือการหาตัวหารทั้งหมดของตัวเลขดังกล่าว จากนั้นนับจำนวนตัวหารที่มีตัวเลขซ้ำกับตัวเลขต้นฉบับอย่างน้อย 1 ตัว
ตัวอย่าง
Input: num = 24
Output: Count is 4
ขั้นตอนการทำงาน:
- หาตัวหารของ 24: 1, 2, 3, 4, 6, 8, 12, 24
- ตรวจสอบตัวหารที่มีตัวเลขซ้ำกับ 24 (คือ 2 และ 4): 2, 4, 12, 24 รวม 4 ตัว
Input: num = 10
Output: Count is 2
ขั้นตอนการทำงาน:
- หาตัวหารของ 10: 1, 2, 5, 10
- ตรวจสอบตัวหารที่มีตัวเลขซ้ำกับ 10 (คือ 1 และ 0): 1, 10 รวม 2 ตัว
โค้ดตัวอย่าง
import java.util.Scanner;
public class CommonDigitDivisors {
// ตรวจสอบว่าตัวเลข m มีตัวเลขซ้ำกับ arr หรือไม่
static int digitCheck(int m, int[] arr) {
while (m > 0) {
if (arr[m % 10] == 1) {
return 1;
}
m = m / 10;
}
return 0;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
// บันทึกตัวเลขที่มีใน n ลงใน array
int[] arr = new int[10];
int m = n;
while (m > 0) {
arr[m % 10] = 1;
m = m / 10;
}
int count = 0;
// หาตัวหารจนถึงรากที่ 2 ของ n
for (int i = 1; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
// ตรวจสอบตัวหาร i
if (digitCheck(i, arr) == 1) {
count++;
}
// ตรวจสอบตัวหารคู่ n/i (ถ้าไม่ใช่ตัวเดียวกัน)
if (n / i != i) {
if (digitCheck(n / i, arr) == 1) {
count++;
}
}
}
}
System.out.println("Count: " + count);
}
}
ผลลัพธ์
Enter any number: 24
Count: 4
การปรับปรุงจากโค้ดต้นฉบับ
- แก้ไขข้อผิดพลาดในตัวแปร
ansให้เป็นcount - เพิ่มการปิด Scanner อย่างถูกต้อง
- ปรับปรุงรูปแบบโค้ดให้อ่านง่ายขึ้น
- เพิ่มคำอธิบายในโค้ด