01/10/2018, 16:36

Hỏi cách tính tổng các số nhập vào trừ số 0

Chào mọi người, em có vấn đề muốn hỏi:
Đề yêu cầu tính tổng của dãy số
Cho phép user nhập một chuỗi số bất kì và chỉ dừng khi người dùng nhập số 0 (số 0 không được tính vào sum)
Nếu là số chẵn thì bình phương số đó, xong cộng số đó vào sum
Nếu là số lẻ thì lập phương số đó, xong cộng số đó vào sum

Em viết ra được như đoạn code dưới nhưng khi test thì hình như logic của em sai:
vd Nhập vào 2 3 0 thì kết quả phải là sum = 22 + 33*3 = 31 nhưng khi test trong chương trình kết quả lại ra 27
Mọi người xem code với gợi ý cho em logic bài này với ạ
Em cám ơn

#include<stdio.h>

int main()
{

int number, squareNumber, cubeNumber;
int sum = 0;

printf("Enter number to cal sum:");
scanf("%d", &number);

while(number > 0) {
    sum += number;
    scanf("%d", &number);
 
    if(number%2 == 0) {
    //If the number is even, SQUARE that number before adding it to the Sum.
        squareNumber = number*number;
    }else{
    //If the number is odd, CUBE that number before adding it to the Sum.
        cubeNumber = number*number*number;
    }
}

sum = squareNumber + cubeNumber;
printf("Sum of sequences = %d",sum);

return 0;
}
Anh Khoa viết 18:51 ngày 01/10/2018

Bạn chỉ cần cho if chạy xong tới scanf là được nha, vì khi chạy loop phải xét chẵn lẻ trước rồi mới cho người khác nhập tiếp. Còn nếu cho nhập rồi mới xét chẵn lẻ thì sẽ có 1 giá trị trả về số 0

while(number > 0) {
    sum += number;
    //scanf("%d", &number); Chỗ này nên đưa xuống dưới

    if(number%2 == 0) {
    //If the number is even, SQUARE that number before adding it to the Sum.
        squareNumber = number*number;
    }else{
    //If the number is odd, CUBE that number before adding it to the Sum.
        cubeNumber = number*number*number;
    }
    scanf("%d", &number);
}
Cofvco viết 18:42 ngày 01/10/2018

à em hiểu rồi, em cám ơn ạ

Kuroemon viết 18:50 ngày 01/10/2018
// nếu điều kiện là cho đến khi người dùng nhập số 0 thì bạn nên thay bằng while(number != 0) luôn
// cái này bạn dùng vòng lặp do-while cũng được
while(number != 0) {
    //sum += number; // chỗ này bị sai rồi nè bạn, bạn nên bỏ nó đi và làm theo cái mình để phía dưới
    scanf("%d", &number);
 
    if(number%2 == 0) {
        squareNumber = number*number;
        //bạn nên để cộng ở đây luôn
        sum += squareNumber;
    }else{ // hoặc bạn không cần tạo biến square với cube cũng được
        cubeNumber = number*number*number;
        //ở đây nữa
        sum += cubeNumber;
    }
}

với khúc này :
sum = squareNumber + cubeNumber;
biến squareNumber hiện tại là 0, cubeNumber = 27 nên kết quả nhận được sẽ không như ý muốn

Bài liên quan
0