如何避免溢出?

时间:2019-12-06 14:05:37

标签: overflow long-integer digits

假设我有下一个总数:sum(n) = 1^2 + 2^2 + 3^2 + 4^2 + ... + n^2。 仅当总和的值大于9时,才需要显示总和的最后9位数字,否则程序将仅输出总和。

// INPUT -> OUTPUT

24 -> 4900

197 -> 2567895

1120878 -> 332957639 // showing the last nine digits

1123432878 -> 057753639 // showing the last nine digits

我的Java代码实现摘要:



public class SumSquare{
    public static int getDigits(long n) {
        int count = 0;
        if(n==0) {
            return 1;
        }
        while(n!=0) {
            n /=10;
            count++;
        }
        return count;
    }
    public static void showNine(long n) {
        if(getDigits(n) == 1) {
            System.out.print(n%10 + " ");
        }
        if(getDigits(n)>=9) {
            int count = 0;
            long curN1 = 0;
        while(n!=0 && count<9) {
            long curN = n;
            curN = n%10;
            curN1 = curN1 *10 + curN;
            n /=10;
            count++;
        }
        System.out.println(rev(curN1));
        }
    }
    public static long rev(long n) {
        long curN = n;
        long rev = 0;
        while(n!=0) {
            curN = n%10;
            rev = rev*10 + curN;
            n /=10;
        }
        return rev;

    }
    public static void sum(long n) {
        long sum = (n*(n+1)*(2*n+1))/6;
        if(getDigits(sum)<9) {
            System.out.print(sum + " ");
        }
        if(getDigits(sum)>=9) {
            showNine(sum);
        }

        }



    public static void main(String [] args) {
        long n = 1123432878;
        sum(n);
    }

}

问题是,当我尝试查找最后一个数字的最后九个数字时,出现溢出错误。 我的问题是如何避免这种溢出问题?

0 个答案:

没有答案