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;
}
Bài liên quan
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 ý:
<= number
?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?
< number
thì không cần phải dùng lệnh if như trên. Chỉ cầnKhoan, 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ì.
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! :))