26-12-2014, 14:22
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,776
|
|
אתה מתכוון להמציא את GMP מחדש? או שלהשתמש בה לצורך העניין זה בסדר... (ואז סביר שאתה יכול להגדיל שם מונה כל פעם באחד ולהשתמש ב gmp_printf() עם ה format string הרלוונטי, לדוגמא: %Zd)
או שאתה בכלל לא בונה על שימוש בערך המקסימלי האפשרי של double (לפי MSDN, מדובר על 1.79769e+308)? אם זה המצב, אז... נראה לי שהאפשרות האחרת היא פשוט מחרוזת שבה מקדמים "מספרים", או, לחלופין, מערך שהוא צירוף של מספר מונים (בהתאם לרוחב המספר שאתה רוצה לעשות). נניח שכל תא במערך יכיל מספר עד 999,999,999 (או מה שלא יהיה המספר מתחת למספר העגול שספרתו הראשונה לא תוכל להגיע ל 9 לפי סוג המשתנה), שאותו אתה פשוט תקדם עד שיגיע למספר הגבוה מהמספר הנ"ל - וכשיגיע - פשוט תאפס אותו, ותתחיל לקדם את המשתנה שבתא הסמוך לו במערך, עד שגם התא הסמוך יגיע לאותו מספר, וכך הלאה, עד שבעצם סט הספרות במערך יגיע לערך שאליו אתה מצפה שהוא ידוע מראש (אתה יכול לחלק את מחרוזת הקלט שמכילה את מספר היעד לקבוצות בגודל המדובר, לעשות על כל חלק atoi(), ולעשות מערך עם מפתחות מקבילים המכילים את מספר היעד של כל חלק. כמובן שאם מספר היעד אינו עגול, תצטרך לבדוק כל פעם את כל המפתחות שעוד לא הגיעו ליעד, משמאל לימין).
לחלופין, כאמור, אפשר לעשות את כל זה סתם עם מחרוזת שעושים עליה מניפולציה סטייל "לזכור ספרה בחשבון מכולת" כמו שכולנו למדנו ביסודי, עד שהגעת למחרוזת ששווה למחרוזת היעד , אבל קידום של משתנים כנראה מהיר יותר מבחינה חישובית...
אולי לאלה שכן עשו תואר בהנדסת תוכנה יהיה פתרון יצירתי יותר
|