假设我有下一个总数: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);
}
}
问题是,当我尝试查找最后一个数字的最后九个数字时,出现溢出错误。 我的问题是如何避免这种溢出问题?