杂题一些(更新中)

来源:互联网 发布:nginx配置ssl模块 编辑:程序博客网 时间:2024/04/30 14:01

1. 对于给定的一个数字正整数N,是否存在有几个连续数字相加等于N.
如:
1+2=3
4+5=9
2+3+4=9

1.给定一个数字,求出所有满足以上条件的表达式.
2.什么样的数字一定不存在以上的的情况?
3.N最多可以是几个连续数字相加的和?

解f法:如果一个数k能够写成若干个连续数的和,比如i+...+j,那么可以列一个求和公式,(1+2+....j) - (1+2+...i-1) = k,根据求和公式,j*(j+1) / 2 - (i-1)*i /2 = k => j^2 + j - i^2 + i = 2k 变化一下,(j^2 - i^2) + j + i = 2k => (j + i)(j - i) + (j + i) = 2k => (j+i)(j-i+1) = 2k

因此只要对2k做因式分解,就可以求出j和i。

 

2.

unsigned short a = 6;
short b = -11;
判断(a+b)的符号

 

signed与unsigned一起的时候,标准上是转换成unsigned的,但不少编译器是采取:如果结果未超出signed范围,当作signed处理,否则就当unsigned处理。
所以此处(a+b)为signed. 

 

写了c++代码来验证:

    unsigned short a=6;

    short b=-11;

    unsigned short e = 0x7FFF;

    short f = 1;

    cout<<(a+b)<<endl;//输出为-5,说明是signed类型

    cout<<(e+f)<<endl;//输出为32768,说明是unsigned类型