Sum from 1 to n in c++

#include <iostream>
using namespace std;
int summax(int n){
int sum=1,i=1;
while(i<=n){
i+=1;
sum+=i;	
}	
cout<<"sum is: "<<sum<<endl;	
}

int main(){
	int n;
	cout<<"enter integer n: ";
	cin>>n;	
	summax(n);
return 0;
}

em code tính tổng từ 1 đến n nhưng khi nhập vào ví dụ số 10 thì đáng lý ra là 55 thì nó ra 65 tức là nó đã tính tổng luôn số 11 . em xin hỏi em đã gì sai , em chạy tay rồi nhưng không hiểu sai chỗ nào

em đã tìm ra lỗi rồi :))).

Tìm ra lỗi không phải là để đấy là xong

@drgnz nên close bài này. Nếu tiện thì unlist luôn.

Nhân tiện bạn nên viết cách giải của bạn vào đây, tick solution để những người sau xem biết lỗi gì thì có ngay bài giải ở đó. Chúng ta nên thể hiện lòng tốt vì đây là cộng đồng văn minh :))

3 Likes

Đảo ngược 2 dòng này lại, vì nếu i = 10 thì vẫn đúng nên sum sẽ cộng thêm 11. Đảo ngược lại sẽ giải quyết được chuyện này. Với cả để luôn sum = 0

1 Like

mình đã tìm ra lỗi là ở dòng while (i<n) mới đúng nhé

Cách đấy cũng được :smile: Nhưng Logic không được hay cho lắm :wink:

2 Likes

Sai de quy nhe ban :smiley:

int summax(int n){
    if (n == 0)
        return n;
    else
        return n + summax(n-1);	
}
1 Like

m thấy nên hạn chế dùng đệ quy, dùng đệ quy dễ gây lỗi stack overflow lắm.
Thêm vào đó là việc đệ quy sẽ làm tốc độ của chương trình chậm hơn nhiều.

3 Likes

Để ++i cuối cùng thì giống như for vậy => nên để như vậy.

while này nên dùng khi for không làm được, như trường hợp thân vòng lặp phải chạy ít nhất một lần (for kiểm tra sau khi khởi tạo/tăng - trước khi lặp)

3 Likes

mình newbie bạn ơi :))))

1 Like

Anh off-topic một chút nhưng bài này có một cách giải đơn giản là dùng toán, học ở cấp 2, là được rồi

1 + 2 + ... + n = n*(n + 1) / 2
8 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?