30/09/2018, 22:34

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
giúp mình in ra 16 với

Lưu Thành Vương viết 00:50 ngày 01/10/2018

int n,S,du;

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

Qúy_Night_0806 viết 00:51 ngày 01/10/2018

tks bạn nhé

Qúy_Night_0806 viết 00:48 ngày 01/10/2018

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

Người bí ẩn viết 00:40 ngày 01/10/2018

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

Lưu Thành Vương viết 00:42 ngày 01/10/2018

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 )
Nếu muốn khắc phục thì:
+Có thể làm như bạn trên.
+Đệ quy :3

Qúy_Night_0806 viết 00:49 ngày 01/10/2018

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

Người bí ẩn viết 00:38 ngày 01/10/2018

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

Bài liên quan
0