【编程之美】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; }