Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

นับตัวหารของ n ที่มีตัวเลขซ้ำกับ n อย่างน้อย 1 ตัวใน Java

ได้รับตัวเลข num งานคือการหาตัวหารทั้งหมดของตัวเลขดังกล่าว จากนั้นนับจำนวนตัวหารที่มีตัวเลขซ้ำกับตัวเลขต้นฉบับอย่างน้อย 1 ตัว

ตัวอย่าง

Input: num = 24

Output: Count is 4

ขั้นตอนการทำงาน:

  1. หาตัวหารของ 24: 1, 2, 3, 4, 6, 8, 12, 24
  2. ตรวจสอบตัวหารที่มีตัวเลขซ้ำกับ 24 (คือ 2 และ 4): 2, 4, 12, 24 รวม 4 ตัว

Input: num = 10

Output: Count is 2

ขั้นตอนการทำงาน:

  1. หาตัวหารของ 10: 1, 2, 5, 10
  2. ตรวจสอบตัวหารที่มีตัวเลขซ้ำกับ 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 อย่างถูกต้อง
  • ปรับปรุงรูปแบบโค้ดให้อ่านง่ายขึ้น
  • เพิ่มคำอธิบายในโค้ด