جافا:الفشل في العمل بأعداد كبيرة (مشروع أويلر:#1)

StackOverflow https://stackoverflow.com//questions/22023975

  •  21-12-2019
  •  | 
  •  

سؤال

النظر في التعليمات البرمجية التالية:

public static void main(String[] args){
        int target = 99999;
        revised(target);

    long total = 0;
    for(int x = 0; x <= target; x++){
        if(x % 3 == 0 || x % 5 == 0)
        total+=x;
    }
    System.out.println("Method B: " + total);
}

private static double findSum(int target, int divisor){
        int upperBound = target/divisor;
        return divisor*(upperBound+1)*upperBound*.5;
}

private static void revised(int target){
        double sumOne = findSum(target, 3);
        double sumTwo = findSum(target, 5);
        double sumThree = findSum(target, 15);
        System.out.printf("Method A: %.0f  \n", sumOne + sumTwo - sumThree);
}

مشروع أويلر # 1 مشكلة:اطبع مجموع الأعداد الصحيحة القابلة للقسمة على 3 أو 5.

الكود التالي صحيح عندما يكون الهدف هو 9 ، 99 ، 999 ، 9999;ومع ذلك ، يفشل عند تعيين المتغير الهدف إلى 99999.لا تسفر الإجابة الناتجة عن الوظيفة المنقحة عن نفس نتيجة طريقة القوة الغاشمة الموجودة في الوظيفة الرئيسية.لا أعتقد أن هذا يرجع إلى تجاوز من النوع المزدوج.

هل يمكن لشخص ما أن يشرح سبب فشل الوظيفة المنقحة عند إعطائها أعدادا كبيرة ولكنها تعطي نفس النتائج (كطريقة القوة الغاشمة) عند إعطاء أرقام أصغر?

هل كانت مفيدة؟

المحلول

مجرد استخدام نفسه DataType في كل مكان Double

public static void main(String[] args){
            int target = 99999;
            revised(target);
    }

private static double findSum(double target, double divisor){
            double upperBound = target/divisor;
            System.out.println("|"+upperBound+"|"+target+"|"+divisor);
            return divisor*(upperBound+1)*upperBound*.5;
    }

private static void revised(double target){
            double sumOne = findSum(target, 3);
            double sumTwo = findSum(target, 5);
            double sumThree = findSum(target, 15);
            System.out.printf("%.0f  \n", sumOne + sumTwo - sumThree);
            System.out.println("|"+sumOne+"|"+sumTwo+"|"+sumThree);
    }

تحدث هذه المشكلة ، عندما يتم تحويل نوع البيانات جولة يتم تنفيذ

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top