בעיה בחלוקת מספר ליחידות בשפת C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

בעיה בחלוקת מספר ליחידות בשפת C


TecNodRom

Recommended Posts

שלום רב,

יש לי בעיה בחלוקת מספר לספרות.

אם לדוגמא אני לוקח את המספר

999999999 (9 פעמים9)

 
printf("Enter number to 10 digitals\n");
scanf("%d",&p);


a = (p % 10);
b = (p % 100) / 10;
c = (p % 1000) / 100;
d = (p % 10000) / 1000;
e = (p % 100000) / 10000;
f = (p % 1000000) / 100000;
g = (p % 10000000) / 1000000;
h = (p % 100000000) / 10000000;
j = (p % 1000000000) / 100000000;
k = (p/1000000000);

אז זה בסדר, וכל ספרה נכנסת למקומה ו k מקבל 0

(כל אותו מקבלת 9 חוץ מK שמקבלת 0)

אבל ברגע שאני שם

9999999999 (10 פעמים 9)

זה כבר לא עובד והכל מתחרבש...

החלפתי את המשתנה P מסוג אינטגר ל9999999999(10 פעמים 9) וזה עבד...

זאת אומרת שיש הפרעה כלשהי במשתנה...

אז ניסיתי לשים אותו כ Long וזה גם לא עזר....

אז אשמח לעזרתכם לפתור את הבעיה

תודה רבה!

קישור לתוכן
שתף באתרים אחרים

int הוא בדרך כלל מספר בן 32 ביט, כלומר מספר בתחום 2147483648- עד 2147483647.

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

במקרה של unsigned int המספר הוא בין 0 ל-4294967295, וגם אז תהיה גלישה.

המשמעות של long בד"כ משתנה ממערכת למערכת, יש מערכות שבהן long הוא 64 ביט, ויש מערכות שבהן long הוא 32 ביט (כמו int) ובשביל 64 ביט צריך להשתמש ב-long long.

קישור לתוכן
שתף באתרים אחרים

מה זה "לא הולך לי"?

לא מתקמפל? מתקמפל אבל לא רץ? לא מציג תוצאות נכונות? באה גודזילה ואוכלת לך את המחשב?

כמו שאמרתי קודם, אי אפשר להכיל מספר בן 10 ספרות בתוך int, אתה חייב להשתמש ב-long long או int64 (שהם אותו דבר).

חוץ מזה, למה שלא תשתמש בלולאה (כל פעם תחלק את המספר ב-10)?

קישור לתוכן
שתף באתרים אחרים

לא הולך לי=לא משפיע על התוכנית השינוי של הLong long

חוץ מזה שלא למדנו את זה אז אני מעדיף שלא להשתמש בזה.

התוכנית בעיקרון היא:

מקבלת מספר עד 10 ספרות בלבד ובודקת האם הוא פלינדרום ( Palindrome : קריאת הספרות שלו זהה בשני הכוונים) ומדפיסה הודעה מתאימה בשני המקרים .(אסור להשתמש במערכים)

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

אם האיברים האחרונים שווים ל0 והראשון הוא ספרה אז זה לא פלינדרום.

אשמח לדעתך בנושא והסבר כיצד לעשות זאת בתור לולאה.

אני חדש בקטע הזה, אז כל דבר הוא מבחינתי בגדר לימוד ולכן

לא עשיתי לולאה כי אני לא יודע איך זה ישפיע.

קישור לתוכן
שתף באתרים אחרים

בשביל לפתור את הבעיה על מספרים עם 10 ספרות או יותר, צריך אחד משני דברים:

להשתמש בטיפוס שמסוגל להחזיק 64 ביט, כלומר long long, שלטענתך זה לא רלוונטי, או

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

יש איזו דרישה מיוחדת שאתה אמור להיות מסוגל לטפל במספרים גדולים?

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

קישור לתוכן
שתף באתרים אחרים

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

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

קישור לתוכן
שתף באתרים אחרים

גררר זה ממש מייאש!

כל נסיון לגרום לתוכנה לקלוט מספר שהוא 10 ספרות גורר תקלה.

בדבר הלקוט ספרה-ספרה- אי אפשר כי אם אני אשים 10 משתנים אחד ליד השני וזה שיכניס מספר לתוכנה ירצה מספר של 5 ספרות? התוכנה לא תמשיך עד שהיא תקבל את כל הספרות.

קישור לתוכן
שתף באתרים אחרים

למה לא לקלוט את המספר בתור string?

אם בסך הכל אתה צריך להדפיס את המספרים בחזרה כשהם מופרדים...

אתה יכול לקרוא אותם ככה


char* str;
scanf("%s",str);
//could be scanf("%s",&str); can't remember
//print the i-th char
printf("digit - %c",str[i-1]);

אולי זה לא הכיוון של הספרות שאתה רוצה... אבל זה אמור לעבוד וגם עם יותר מ-10 ספרות :)

בהצלחה,

סיון

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...