// Энэ удаад while давталтын тухай орууллаа.
#include <stdio.h>
int main() {
// Энэ нь мөн байнга ашиглагдах зүйлсийн нэг мөн.
// Бодлого. Нэг бүхэл тоо өгхөд 1-ээс тэр тоо хүртэл 1 мөрөнд хэвлээд
// дараагийн мөрөнд тэр тооны цифрүүдийн нийлбэрийг ол.
/*
while( нөхцөл ) {
хэрвээ while-ын хаалтанд байгаа нөхцөл үнэн бол
{} доторх үйлдлүүд хийгдэнэ.
эсрэг тохиолдолд давталт зогсоно.
}
Ерөнхийдөө нэг ийм.
*/
int n, i, s; // хувьсагчдаа зарлаж байна.
scanf("%d", &n); // Оролтонд өгөх нэг тоогоо уншиж байна.
i = 1; // бид 1-ээс эхлээд хэвлэх тул i = 1;
while( i <= n ) {
// Хэрвээ i гэсэн хувьсагчийн утга n-ээс бага буюу тэнцүү бол бид
// хэвлэсээр байх болно. Тиймээс бидний нөхцөл бол i <= n
printf("%d ", i); // i нь нөхцлийг биелүүлж байгаа тул хэвлэнэ.
i += 1; // i = i + 1 гэсэнтэй адил. мөн i++ гэж болно.
// i-ын утгыг нэгээр нэмэгдүүлнэ. Дараагийн тоог шалгаж үзнэ гэсэн үг юм.
// бид i-ын утгыг өөрчлөхгүй бол хязгааргүй давталт болох юм.
// Тиймээс нөхцөл болон өөрчлөгдөх утгаа зөв тооцох ёстой.
}
printf("\n"); // мөр шилжиж байна.
s = 0; // одоо цифрүүдийн нийлбэрийг олно. Тэр утгыг s-д хадгалы.
// s = 0 гэж өгөхгүй бол бид s хэд гэдгийг хэлж мэдэхгүй.
while( n > 0 ) {
// Хэрвээ n тоо тэгээс их бол энэ давталт үргэлжлээд л байна.
s = s + (n%10);
// s нь одоогийн n тооны 10д хуваасан үлдэгдэл буюу сүүлийн цифрээр нэмэгдэнэ.
n /= 10; // n = n/10 гэсэнтэй адил
// n тооны сүүлийн цифрийг бид нэмсэн тул энэ тооныхоо сүүлийн цифрийг хасах ёстой.
// тэгхийн тулд энэ тоог 10-д хуваахад хангалттай юм.
}
printf("%d\n", s); // хариу болох s-ыг хэвлэнэ.
return 0;
}