עבור לתוכן

Featured Replies

פורסם

 

אנא המשך לקרוא תחילה אם אתה מאמין שהשאלה הזו כבר הועלתה.

 

אני צריך להדפיס את כל המספרים של ארמסטרונג שנעים בין 1 ל-10000. הבעיה שלי היא שכשהתוכנית שלי פועלת ומגיעה ל-150, היא לא עושה כלום.

(1^3) + ((5^3)-1) + (0^3)

 

במקום

 

(1^3) + (5^3) + (0^3).

 

 

 

כתוצאה מכך, הוא לא מדפיס 153 (מספר ארמסטרונג), כי הסכום הוא 152. לפי הדוח הזה, אני לא בטוח אם מספרים אחרים עושים את אותו הדבר. אבל בדקתי עד 200 ואין שום בעיה עם מספרים אחרים מלבד אלו באזור 150-160.

 

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

 

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    for(int i = 0;i <= 10000;++i)
    {
        int r = i;
        int dig = 0;
        while(r != 0)
        {
            dig++;
            r /= 10;
        }
        int n = i, sum = 0;
        while(n != 0)
        {
            int d = n % 10;
            sum += pow(d, dig);
            n /= 10;
        }
        if(sum == i)
            cout << i << ' ';
    }
    cout << "\n\n\n";
    return 0;
}

 

 

 

 

פורסם

אתה שואל על פייתון אבל מביא תוכנית ב-C++...

 

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

 

לדעתי הבעיה נובעת מהשימוש בפונקציית POW שהקלט והפלט שלה הוא מסוג double ואתה משתמש ב-int.

יש פה הסבר שלם על הבעיה תחת הכותרת "Working of pow() function with integers"

https://www.geeksforgeeks.org/power-function-cc/

נערך על-ידי etal

הצטרפ/י לדיון

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

אורח
הוסף תגובה

דיונים חדשים