就是输入一个数n, 输出它可以用连续的数表示的加法。

如:

输入9

输出 9=4+5

       9=2+3+4

 

代码: 我不会64位无符号正整数表示,就写个简单的int版本的好了...

思路就是 如果sum = a + (a+1) + (a+2)...+(a+n-1)

对于给定的n, a=(sum-n(n-1)/2)/n 若a为整数就成立,输出

n的范围,最小是2, 最大是a=0时  n(n-1)/2=sum  n<sqrt(2sum)+1

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void getAllContinuousNum()
{
    int sum;
    scanf("%ul\n", &sum);

    int maxlength = sqrt(double(sum) * 2) + 1;
    int firstnum = 0;
    for(int length = 2; length < maxlength; length++) //对数字的个数循环
    {
        if((sum - length * (length - 1) / 2)% length == 0) //可以得到解
        {
            firstnum = (sum - length * (length - 1) / 2) / length;
            printf("%d=%d", sum, firstnum);
            for(int num = firstnum + 1, i = 1; i < length; i++, num ++ )
            {
                printf("+%d", num);
            }
            printf("\n");    
        }
    }
}

int main()
{
    for(int i = 0; i < 10; i++)
    {
        getAllContinuousNum();
    }
    return 0;
}

 

相关文章:

  • 2022-12-23
  • 2021-07-22
  • 2022-01-19
  • 2021-11-12
  • 2022-12-23
  • 2021-05-17
  • 2021-10-22
猜你喜欢
  • 2021-08-20
  • 2021-06-02
  • 2022-12-23
  • 2021-10-01
  • 2022-02-07
  • 2021-10-29
  • 2022-02-20
相关资源
相似解决方案