题目:
题目详情
高斯在上小学时发明了等差数列求和公式:1+2+..+100=5050。现在问题在于给你一个正整数n,问你他可以表示为多少种连续正整数之和?(自身也算)。
输入格式:
多组数据,每组数据一行,一个正整数n。 0<n<2000000000
输出格式:
每组数据一行,包含一个正整数,表示结果。
答题说明
输入样例
5
120
输出样例:
2
4
解释:
5=2+3=5
120=1+2+...+15=22+23+24+25+26=39+40+41=120
AC代码:
#include "stdio.h"
#include "math.h"
int main()
{
int count;
long long x,n;//防止int类型溢出
while (scanf( "%I64d" ,&n)!=EOF)
{
double s=n;
for (count=0,x=2;s>=1;x++){
if (floor(s+0.5)==s) {//floor()向下取整 floor(s+0.5)即将s四舍五入
count++;
// printf("%d > x:%d s:%d\n",count,x-1,(int)s);
}
s=( double )n/x+(1-x)/2.0;
}
printf( "%d\n" ,count);
// break;
}
return 0;
}
#include "math.h"
int main()
{
int count;
long long x,n;//防止int类型溢出
while (scanf( "%I64d" ,&n)!=EOF)
{
double s=n;
for (count=0,x=2;s>=1;x++){
if (floor(s+0.5)==s) {//floor()向下取整 floor(s+0.5)即将s四舍五入
count++;
// printf("%d > x:%d s:%d\n",count,x-1,(int)s);
}
s=( double )n/x+(1-x)/2.0;
}
printf( "%d\n" ,count);
// break;
}
return 0;
}