Kiểm tra số hoàn thiện trong C

Em đang code ktra một số có phải số hoàn hảo hay không.
nếu n = 12 => không phải số hoàn hảo
nếu n = 6 => là số hoàn hảo
Tuy nhiên khi test thì mọi số nhập vào đều có kết quả là số hoàn hảo.
Em chưa hiểu mk sai ở đâu, mong mn giải đáp.

    #include<stdio.h>
    #include<stdbool.h>

    bool so_hoan_thien(int n)
    {
    	int S = 0;
    	for (int i = 0; i <= n; i++)
    	{
    		if (n % i == 0)
    		{
    			S += i;
    		}
    	}
    	if (S == n)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }

    int main()
    {
    	int n;
    	printf("n = ");
    	scanf("%d", &n);
    	if (so_hoan_thien)
    	{
    		printf("%d la so hoan thien", n);
    	}
    	else
    	{
    		printf("%d khong la so hoan thien", n);
    	}
    	return 0;
    }

Cái gì đây???

5 Likes

dạ cái đấy để ktra xem gtri trả về của hàm so_hoan_thien là true hay false ấy ạ.
E tham khảo đk theo link này: https://codecute.com/c/kieu-bool-boolean-trong-lap-trinh-c-c-code-vi-du.html

Cảm ơn mn e tìm đk lỗi sai r ạ.
Code này sai 3 lỗi

  1. Khi gọi so_hoan_thien chưa cung cấp n

  2. i=0 sẽ bị lỗi division by 0

  3. Định nghĩa số hoàn thiện là “một số nguyên dương mà tổng các ước nguyên dương chính thức của nó (số nguyên dương bị nó chia hết ngoại trừ nó) bằng chính nó”. Để i <= n là auto hỏng
    Với lại để optimize thì e nghĩ là nên để for chạy từ i = 0 đến i <= (n/2) thôi

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?