30/09/2018, 18:58

Tính tổng các chữ số của 1 số tự nhiên

Mọi người sửa giúp mình đoạn code này với ạ. E chạy test với số có 4 chữ số thì lại sai ạ

#include<stdio.h>
int main()
{
  int a,hc,hdv,s,i,tong,tong2;
  a=19901;
  hc=a%100*1/10;
  hdv=a%10;
  i=100;
  s=0;
  tong=0;
  tong2=0;
  while (a>=i)
      {
s=a/i;
tong2=tong2+s;
i=i*10;
      }
  tong=tong2+hc+hdv;
  printf("%d %d %dTong",tong,s,tong2);
  return 0;
}

Thanks mọi người

X viết 21:12 ngày 30/09/2018

Bạn chỉnh sửa lại câu hỏi cho rõ ràng xíu. Ít nhất phải có input và output như thế nào… Nhìn vào code thấy a s, i, tong, tong2 là thấy chóng mặt

Nguyễn Hữu Tý viết 20:59 ngày 30/09/2018

Bạn làm lại giúp mình được ko. Chứ có lẽ cách mình làm bị sai rồi
Bài yêu cầu phải dùng lệnh While và nhập số tự nhiên độ dài bất kì và tính tổng các chữ số đó bạn

X viết 21:02 ngày 30/09/2018

Độ dài bất kỳ?
Xem video của mình xem đúng bài của bạn không

Nguyễn Hữu Tý viết 21:00 ngày 30/09/2018

Thanks anh nhiều :3 Suy nghĩ từ chiều đến giờ mà chưa ra hại não cực :((

Nguyễn Hữu Tý viết 21:11 ngày 30/09/2018

Không phải rồi anh ơi. Em mới học Turbo C thôi nhìn code C++ vẫn chưa hiểu được ạ Anh có thể viết bằng ngôn ngữ C thuần giúp em đc ko ạ

Đinh Phong viết 20:59 ngày 30/09/2018

@typrone1
Về nguyên tắc có số a
Ta dùng vòng while kiểm tra xem a>0? nếu false thì dừng, còn không thì lấy a chia 10 lấy dư để được số cuối cùng, và lưu biến a mới = a chia 10 lấy nguyên để bỏ số cuối cùng đi, rồi tính tổng thì = tổng cộng tiếp với giá trị dư vừa tách được ra
Ví dụ ban đầu tổng =0, a = 314 kiểm tra thấy a lớn hơn 0 thì chia được dư = 4 , a mới = 30
tổng = tổng + dư = 0 + 4 = 4
Tiếp theo kiểm tra tiếp a có > 0 không , a lúc này là 30 vẫn lớn hơn 0, chia 10 tiếp được dư = 1, a mới = 3
tổng = tổng + dư = 4 + 1 = 5
Tiếp theo kiểm tra tiếp a > 0, a lúc này là 3 vẫn lớn hơn 0, chia 10 tiếp được dư = 3, a mới = 0
tổng = tổng + dư = 5 + 3 = 8
Lúc này a đã không còn lớn hơn 0 nữa điều kiện trả về false ngắt vòng while
đưa ra giá trị tổng lúc này là tổng = 8
Code ở dưới đây

#include<stdio.h>
int main()
{
  int a,du,tong;
  a=19901;
  tong=0;
  du=0;
  while (a>0) {
     du = a%10;
     a = a/10;
     tong = tong + du;
  }
  printf("Tong cac chu so %d: ",tong);
  return 0;
}

Nguyễn Hữu Tý viết 21:08 ngày 30/09/2018

Mình hiểu rồi
Thanks @Dinh_Phong nhé

Bài liên quan
0