Tổng các chữ số n

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,S,du;
    printf("Nhap n:");
    scanf("%d",&n);
    while(n>0){
        du=n%10;
        n=n/10;
        S=S+du;
    }
    printf("%d",S);
    return 0;
}

tổng 1924 là 16 khi chạy thì nó đảo ngược thành 61 :fearful:
giúp mình in ra 16 với

Khởi tạo giá trị cho S
S=0

1 Like

tks bạn nhé :slight_smile:

http://codepad.org/E6N1KYQt bài này là liệt kê các số n, lúc chạy thì nó cũng đảo ngược luôn

Dĩ nhiên là nó đảo ngược rồi vì thuật của bạn là đọc số từ bên phải sang bên trái trong khi con người thường đọc số từ trái sang phải.
Để khắc phục điều này, bạn chỉ cần đảo ngược số n trước khi phân tích trong vòng while thôi :slight_smile:

1 Like

Thuật toán bạn làm luôn xuất hàng đơn vị ra trước nên ngược lại là đúng r( thường dùng để xác định số đối xứng :grin:)
Nếu muốn khắc phục thì:
+Có thể làm như bạn trên.
+Đệ quy :3

1 Like

đảo ngược số n trước khi phân tích làm sao thế bạn?

Ví dụ nhé: Số 1234 khi đảo ngược lại phải là số 4321 không.
4321 = 4 * 1000 + 3 * 100 + 2 * 10 + 1 * 1 = 4 * 10^3 + 3 * 10^2 + 2 * 10^1 + 1 * 10^0
=> Rút ra được thuật toán để đảo ngược 1 số là:

int SoDaoNguoc = 0;
int Sochuso = log10(n); // khỏi + 1
while (n != 0)
{
     int chuso = n % 10;
     n /= 10;
     SoDaoNguoc += chuso * pow(10, Sochuso--);
}


=> SoDaoNguoc chính là số cần tìm

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?