整数分解成多个连续的整数序列
题目描述:将一个正整数表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
输入任何一个正整数,找出符合这种要求的所有连续正整数序列。
转载请注明本文出处:http://blog.csdn.net/love254443233
15=1+2+3+4+5
15=4+5+6
15=7+8
输入任何一个正整数,找出符合这种要求的所有连续正整数序列。
如果没有找到,刚输出NULL
分析:利用差数列公式求解,假设输入整数n,n=(a1+a2)*(a2-a1+1)/2,0<a1<a2<n。
基于这个方法,不难写出如下代码:
void separateIntoItems(long n) {
if (n <= 2) {
System.out.println("NULL");
return;
}
double max = Math.pow(2, 64);
if ((double) n > max) {
System.out.println("NULL");
return;
}
boolean isExist = false;
// a1 is the first number
for (int a1 = 1; a1 <= n / 2; a1++) {
// a2 is the last number
for (int a2 = a1 + 1; a2 < n; a2++) {
// if exist output the result
if ((a1 + a2) * (a2 - a1 + 1) == n * 2) {
isExist = true;
System.out.print(a1);
for (int t = a1 + 1; t <= a2; t++) {
System.out.print(" " + t);
}
System.out.println();
}
}
}
if (!isExist) {
System.out.println("NULL");
}
}转载请注明本文出处:http://blog.csdn.net/love254443233

浙公网安备 33010602011771号