Announcement

Collapse
No announcement yet.

Anh chị giúp em là bài toán tìm số hoàn hảo!!!

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] Anh chị giúp em là bài toán tìm số hoàn hảo!!!

    Em là tân sinh viên, mới học lập trình C++ nên còn gà.
    Em có đoạn code xác định số hoàn hảo viết bằng Visual Studio:

    HTML Code:
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    void main()
    {
    	int i,n,s,m;
    	printf("Nhap mot so nguyen: ");
    	scanf("%d",&n);
    	s=0;
    	for (i=1;i<=n;i++)
    	
    	{
    		if (n%i==0)
    		s=s+i;
    	}
    	printf("Tong cac uoc so cua %d la: %d \n",n,s);
    	m=s/n;
    	if (m==2)
    	printf("So %d la so hoan hao ",n);
    	else
    	printf("So %d khong la so hoan hao",n);
    	getch();
    	
    }
    Em nhập số 6 thì nó vẫn báo là số hoàn hảo, nhưng khi nhập lên số lớn như 100, 200 thì máy vẫn báo là số hoàn hảo.
    Em viết chương trình trên dựa vào tính chất: Số hoàn hảo là số có tổng các ước số gấp đôi số đó.
    Em thấy tổng các ước số của 100 là 217, lấy 217 chia 100 thì gần bằng 2, không biết máy có nhận số 2.17 thành số 2 ko nữa.
    Mong các bác chỉ em cách bắt máy tính đúng bằng 2 luôn.
    Em cảm ơn!

  • #2
    Trong vòng for, em bị nhầm lẫn đôi chút, nó nên chạy đến n - 1 thôi, k chạy đến
    for( i = 1 ; i < n ; ++ i)
    nguyendauit@gmail.com

    Comment


    • #3
      với n = 6: s = 1 + 2 + 3 + 6 = 12 / 6 = 2
      Với n = 12: s = 1 + 2 + 3 + 4 + 6 + 12 = 28 / 12 = 2 => 12 là số hoàn hảo :beatbrick:

      Cái sai của em là chỗ phép chia m=s/n; là chia nguyên nên đôi khi m == 2 nhưng s > 2 *n chứ ko phải là s == 2 *n như em nghĩ :happy:
      Henry Nguyễn (Điệp Nguyễn MBA)
      --
      MBA, Sales Director, Co-founder - MYTH VIET NAM TECHNOLOGY CO., LTD - http://myth.vn/
      Email: diepnguyenmba@gmail.com - Phone: 0905.504.386

      Comment


      • #4
        Originally posted by 10520100 View Post
        Trong vòng for, em bị nhầm lẫn đôi chút, nó nên chạy đến n - 1 thôi, k chạy đến
        for( i = 1 ; i < n ; ++ i)
        Anh xem lại đi, chứ n vẫn là ước của n mà. Sao lại chạy tới n-1 thôi anh?

        Comment


        • #5
          Originally posted by 09520500 View Post
          với n = 6: s = 1 + 2 + 3 + 6 = 12 / 6 = 2
          Với n = 12: s = 1 + 2 + 3 + 4 + 6 + 12 = 28 / 12 = 2 => 12 là số hoàn hảo :beatbrick:

          Cái sai của em là chỗ phép chia m=s/n; là chia nguyên nên đôi khi m == 2 nhưng s > 2 *n chứ ko phải là s == 2 *n như em nghĩ :happy:
          Vậy anh viết lại được không?

          Comment


          • #6
            Code:
            #include <stdio.h>
            #include <stdlib.h>
            int main()
            {
            	// Nhap n
            	int n;
            	printf("Nhap n = ");
            	scanf("%d", &n);
            	
            	// Tinh tong cac uoc 
            	int s = 0;
            	for(int i = 1 ; i < n ; ++ i)
            		if(s % i == 0)
            			s = s + i;
            	
            	// Kiem tra
            	if(s == n)
            		printf("%d la so hoan hao\n", n);
            	else
            		printf("%d khong phai la so hoan hao\n", n);
            	
            	system("pause");
            	return 0;
            }
            Số hoàn hảo là số có tổng các ước (không tính chính nó) bằng số đó !
            nguyendauit@gmail.com

            Comment


            • #7
              Originally posted by 10520100 View Post
              Code:
              #include <stdio.h>
              #include <stdlib.h>
              int main()
              {
              	// Nhap n
              	int n;
              	printf("Nhap n = ");
              	scanf("%d", &n);
              	
              	// Tinh tong cac uoc 
              	int s = 0;
              	for(int i = 1 ; i < n ; ++ i)
              		if(s % i == 0)
              			s = s + i;
              	
              	// Kiem tra
              	if(s == n)
              		printf("%d la so hoan hao\n", n);
              	else
              		printf("%d khong phai la so hoan hao\n", n);
              	
              	system("pause");
              	return 0;
              }
              Số hoàn hảo là số có tổng các ước (không tính chính nó) bằng số đó !
              Thank bác! em hiểu sai tính chất.....:shock:

              Comment


              • #8
                HTML Code:
                #include <stdio.h>
                #include <stdlib.h>
                #include <conio.h>
                int main()
                {
                	// Nhap n
                	int n;
                	printf("Nhap n = ");
                	scanf("%d", &n);
                	
                	// Tinh tong cac uoc 
                	int s = 0;
                	for(int i = 1 ; i < n ; i++)
                		if(n % i == 0)
                			{
                				s += i;
                				printf("\nCac uoc so cua %d la: %d\n", n,i);	
                			}
                	
                	// Kiem tra
                	if(s == n)
                		printf("\n Vay %d la so hoan hao\n", n);
                	else
                		printf("\n Vay %d khong phai la so hoan hao\n", n);
                	
                	getch();
                }

                Comment


                • #9
                  Thì đó, tổng các ước của n (không tính n) bằng n thì cũng giống như tổng tất cả các ước của n bằng 2 * n phim truong thôi mà.
                  Nếu cho i chạy tới n - 1thì xét tổng s có bằng n hay không, còn nếu cho i chạy tới n thì phải xét tổng s và 2 * n có bằng nhau hay không chứ đừng xét s/n có bằng 2 ko.
                  Last edited by 08520001; 18-04-2015, 23:44.

                  Comment

                  LHQC

                  Collapse
                  Working...
                  X