【编程之美】2.21 只考加法的面试题

就是输入一个数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;
}

 

posted @ 2014-11-19 16:57  匡子语  阅读(352)  评论(0编辑  收藏  举报