|
10鱼币
题目如下:
泰泰学长又来玩数字了,泰泰学长想让你帮他求1~n的和,但是这次的求和可不是简单的1+2+...+n。 这次的求和是这样的,如果加到一个数字是2的指数倍,那就不加,反而减掉这个数。
比如 n = 4:-1-2+3-4 = -4。
说明:其中1,2,4都是2的指数倍。
Input
第一行是总询问数 T,接下来T行,每行一个 n,(1<=T<=100)(1<=n<=10^9)
Output
输出对应的结果
Sample Input
2
4
1000000000
Sample Output
-4
499999998352516354
我的代码如下:
- #include<stdio.h>
- /*我的思路就是先高斯求和 再2倍减去2的指数和 因为要变成负数*/
- int main()
- {
- int T;
- long long int n;
- long long int i;//数字开的比较大我用了long long的形式
- long long int sum1 ,sum2 ;
- scanf("%d", &T);
- while(T--)
- {
- scanf("%lld", &n);
- sum1 = 0;
- sum2 = 0;
- for (i = 1; i <= n; i++)
- {
- if (i%2 == 0 || i == 1)
- {
- sum1 += i;//2的指数和 1+2+4......
- }
- }
- sum2 = ((1+n)*n/2) - 2*sum1 ;//先高斯定理求总和 再减去是2的指数的两倍和
- printf("%lld", sum2);
- }
- }
复制代码
但是我的样例运行结果不对
[图片]
希望大佬可以不吝赐教 舅舅小女子 悬赏聊表心意啦
本帖最后由 910201513 于 2019-2-23 22:52 编辑
代码17行,你的判断条件求得和是1+偶数吧,不是2的指数倍吧,比如说6满足判断条件但不是2的指数倍
判断是不是指数倍我目前有两种方法:
1.循环里面除2判断
2.2的指数倍的二进制第一位都是1,其余都是0,{1>(1),2>(10),4>(100),8>(1000)....}
|
最佳答案
查看完整内容
代码17行,你的判断条件求得和是1+偶数吧,不是2的指数倍吧,比如说6满足判断条件但不是2的指数倍
判断是不是指数倍我目前有两种方法:
1.循环里面除2判断
2.2的指数倍的二进制第一位都是1,其余都是0,{1>(1),2>(10),4>(100),8>(1000)....}
|