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;
}
Tại sao lệnh sum phải nằm trong for của code tìm số hoàn hảo
Hi volocanh
Vì yêu cầu nó thế. @_@!
khai báo sum=0 trước vòng for đc ko bạn
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.
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.
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;
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á.
long là 1 kiểu số nguyên thôi chứ có gì đâu?
Chưa hiểu cái gì?
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.
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ì.
- sum không phải là lệnh.
- 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.
Oh, mình rõ rồi, tks! :))