01/10/2018, 11:44

Tại sao lệnh sum phải nằm trong for của code tìm số hoàn hảo

include<iostream>
using namespace std;

int main()
{
    long long  n,sum;
    cout << "Enter your number: "; cin >> n;
    for ( int number = 1;number  <= n;number++)
    {
        sum =0;
        for (int i = 1 ; i <= number;i++)
            if (number%i==0)
                sum+=i;
        if (sum/2.0 == number)
            cout << number << endl;
    }
    return 0;
}
Tao Không Ngu. viết 13:52 ngày 01/10/2018

Hi volocanh
Vì yêu cầu nó thế. @_@!

volocanh viết 13:47 ngày 01/10/2018

khai báo sum=0 trước vòng for đc ko bạn

Vũ Quang Huy viết 13:58 ngày 01/10/2018

Mình chưa hiểu rõ bài tập này lắm, bạn giải thích rõ 1 xíu đề bài được ko? Dựa vào đó mình mới biết nên để sum trong vòng for hay không!

HK boy viết 13:59 ngày 01/10/2018

Mình chưa hiểu rõ bài tập này lắm, bạn giải thích rõ 1 xíu đề bài được ko? Dựa vào đó mình mới biết nên để sum trong vòng for hay không!

Đề: In ra các số hoàn hảo từ 1->n. Số hoàn hảo là số có tổng các ước khác nó bằng nó.
Ví dụ: 6 = 1 + 2 + 3.

khai báo sum=0 trước vòng for đc ko bạn

Không. i là các số trong khoảng từ 1->n, biến sum phải khởi tạo lại = 0 mỗi lần chuyển sang 1 số i mới.

HK boy viết 13:47 ngày 01/10/2018

Góp ý:

  • Nếu chỉ tính tổng các ước nhỏ hơn number thì cần gì phải cho vòng lặp đến <= number?
  • [quote=“volocanh1, post:1, topic:55065”]
    if (sum/2.0 == number)
    [/quote]

Đừng chia 2.0. Kết quả vế bên trái sẽ là kiểu gì cũng là số thực, vế bên phải là số nguyên. So sánh thế nào được?

  • Nếu bạn chạy vòng lặp < number thì không cần phải dùng lệnh if như trên. Chỉ cần
if (sum == number) cout << number << endl;
Vũ Quang Huy viết 13:58 ngày 01/10/2018

volocanh1:
if (sum/2.0 == number)

Đừng chia 2.0. Kết quả vế bên trái sẽ là kiểu gì cũng là số thực, vế bên phải là số nguyên. So sánh thế nào được?

  • Nếu bạn chạy vòng lặp < number thì không cần phải dùng lệnh if như trên. Chỉ cần

Khoan, mình chưa hiểu lắm, nếu đề bài là vậy, thì cnầ gì dùng tới kiểu long? và mình cũng chưa hiểu [quote=“volocanh1, post:1, topic:55065”]
if (sum/2.0 == number)
[/quote]

để làm gì… Bạn giải thích giùm mình… Bữa trước mình làm bài này rồi, mà nhìn cách làm của bạn này mình thấy tối nghĩa quá.

HK boy viết 13:54 ngày 01/10/2018

thì cnầ gì dùng tới kiểu long

long là 1 kiểu số nguyên thôi chứ có gì đâu?

mình cũng chưa hiểu

Chưa hiểu cái gì?

để làm gì… Bạn giải thích giùm mình…

Tổng các ước != n mà bằng n -> tổng tất cả các ước = 2*n, vì n là ước của n.

rogp10 viết 13:51 ngày 01/10/2018

Duyệt qua từng số (!) mà không để sum trong for thì bạn để sum ở đâu đây để ở ngoài thì bạn duyệt làm gì.

Student X viết 13:53 ngày 01/10/2018
  1. sum không phải là lệnh.
  2. cùng debug nhé.
    Giả sử sum ở bên ngoài vòng lặp for, ở number = 1. sum sẽ được gán bằng 1 sau khi chạy xong vòng for bên trong. sau đó number tăng lên thành 2. thì sum sẽ tăng lên thành 4 sau khi vòng bên trong chạy xong. như vậy nếu để sum ở bên ngoài. thì sum sẽ lưu lại giá trị của vòng lặp bên ngoài. đấy là lý do sum để ở bên trong. để mỗi lần lặp vòng ở bên ngoài. thì sum lại được “làm mới” 1 lần.
Vũ Quang Huy viết 13:46 ngày 01/10/2018

Oh, mình rõ rồi, tks! :))

Bài liên quan
0