עבור לתוכן

שפת C - בדיקת זוגיות/אי זוגיות ספרות של מספר

Featured Replies

פורסם

אהלן!

אני רוצה לכתוב תכנית שתקלוט מספר שלם למשל 1234 ותבדוק את הזוגיות / אי-זוגיות של כל אחת מהספרות שמרכיבות את המספר.

למשל כאן:

1 - אי זוגי

2 - זוגי

3 - אי זוגי

4 - זוגי

כל מספר זוגי מבחינתי שווה 1+ נקודה וכל אי-זוגי 1- נקודה, לכן הניקוד של המספר 1234 הוא 0.

יש רעיונות איך אני יכול לעבור סיפרה סיפרה? (אני לא יודע מראש את גודל המספר. זה יכול להיות 1234 וזה יכול להיות 983768903)

פורסם

זה די פשוט, יש לך הרי אופרטור של שארית. תשתמש בו כל פעם על המספר שהוא INTEGER, וחשב את הMODULU 10, שהוא ספרת האחדות שלך. אותה תעשה מודולו 2, קיבלת 0 תוסיף 1 למשתנה צובר, קיבלת 1 תוריד 1 מהצובר. חלק את המשתנה ב10, ותחזור על התהליך עד שהמספר שווה ל0.

פורסם

רקרוסיה


int zug (int a){
if ( a==0) return 0;
int z;
z= (a & 1) ? -1 : 1;
return z + zug(a/10);
}

פורסם
  • מחבר

תודה על העזרה חברים!

ירח אפל, לא הבנתי חצי ממה שכתבת ???

a זה המספר למשל 1234? למה return 0? אפס הוא מספר זוגי בעקרון.

והכי חשוב - z= (a & 1) ? -1 : 1;

לא הבנתי מה קורה כאן. אני בכלל לא מכיר כזה אופרטור של סימן שאלה

פורסם

כי הרקורסיה צריכה לעצור איפשהו. תחשוב שהקוד יהיה:

if (a==0) return 1;

אז מה תהיה תוצאת הפעלת הפונקציה על המספר 5?

חוץ מזה, הפעולה לא ממש מוגדרת היטב על 0, כי טכנית אין לו ספרות בכלל.

אופרטור סימן שאלה ונקודתיים זה אופרטור שמקבל תנאי ושני ביטויים. אם התנאי הוא אמת אז הביטוי הראשון מוחזר, אחרת הביטוי השני מוחזר.

פורסם

sharonp,

אומנם אני בשלבים ראשוניים של למידת C, אבל אנסה את כוחי...

כך הייתי כותב את זה:

#include<stdio.h>

void main()
{
int num, digit;



printf("Enter an integer number...\n");
scanf("%d", &num);

do
{
digit=num%10;
(digit%2==0)?printf("%d is even.\n", digit):printf("%d is odd.\n", digit);
num=num/10;
}while (num>0);


}

ניסיתי לקמפייל וזה עבד לי.

עריכה...

עכשיו ראיתי שרצית גם לעשות צבירת ניקוד חיובי על מספר זוגי, וניקוד שלילי על ספרה אי זוגית...

הנה הקוד המתוקן:


#include<stdio.h>

void main()
{
int num, digit, sum=0;



printf("Enter an integer number...\n");
scanf("%d", &num);

do
{
digit=num%10;
if (digit%2==0)
{
printf("%d is even.\n", digit);
sum++;
}
else
{
printf("%d is odd.\n", digit);
sum--;
}

num=num/10;
}while (num>0);

printf("Number total score is %d", sum);
}

פורסם

שים לב כי אם תקח 1 פחות פעמיים השארית של כל ספרה מודולו 2, תקבל את ה"ניקוד" שלה. לכן, הנה קוד אלגנטי לחישוב מהיר של הניקוד הכולל של המספר:

int main()
{
int input, digit, score=0;
printf("Enter a number:\n");
scanf("%d",&input);
while (input!=0)
{
score+=1-2*((input%10)%2);
input=input/10;
}
printf("Number's score is: %d.\n",score);
}

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים