
31-10-2010, 00:05
|
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
אני הייתי עושה את זה ככה:
קוד:
include <stdio.h>
include <stdlib.h> // Required for abs()
int main(void)
{
int input;
unsigned int digits_sum = 0;
printf("Enter a number: ");
scanf("%d", &input);
input = abs(input);
while(input > 0)
{
digits_sum = digits_sum + input % 10;
input = input / 10;
}
printf("\nThe sum of all digits: %u", digits_sum);
return 0;
}
ניסיתי לעשות את זה פשוט ככל הניתן. הסבר:
יצרתי שני משתנים:
input מסוג int, כדי שיהיה ניתן להכניס כמעט כל מספר, גם חיובי וגם שלילי;
digits_sum מסוג unsigned int, כי סכום הספרות לעולם לא יכול להיות שלילי. הייתי יכול ואולי אף כדאי לעשות את digits_sum מסוג unsigned char כי זה תופס פחות מקום בזיכרון (לא שזה משנה בתוכנית הזאת, אבל טוב להיות מחושבים), אבל לא ידעתי איך זה יתפרש בפונקציה האחרונה printf כשאצטרך להדפיס את המשתנה הזה כמספר unsigned int (האם להשתמש ב- u% נחשב תקין? או שצריך להמיר אותו ל-int בעזרת casting? ... )
אח"כ הדפסתי למשתמש בקשה שיכניס מספר, וקלטתי את המספר בעזרת הפונקציה scanf אל המשתנה input.
אח"כ וידאתי שהמספר השמור במשתנה input הוא חיובי בעזרת הפונקציה abs (מלשון absolute).
ואז בעזרת הלולאה while, שבודקת אם המספר input גדול מ-0, ביצעתי את שתי הפעולות הבאות באופן איטרטיבי (שחוזר על עצמו):
1. הוספתי למשתנה digits_sum את השארית של חלוקת input ב-10 (במילים אחרות - את ספרת היחידות שבמספר input)
2. הקטנתי את המספר שב-input פי 10. שים לב שכאשר מחלקים משתנה מסוג int, השארית לא תישמר כי זה משתנה מסוג שלם (integer)
לבסוף הדפסתי את התוצאה שנאגרה במשתנה digits_sum.
|