zoukankan      html  css  js  c++  java
  • Tricky Sum

    Description

    求和是一种最常见的运算,我们经常做的就是1加到n的和。例如,1加到100的和是5050。但是现在,我们稍微变动一下求和方法,对于属于2的幂次的数,我们做的是减法,其余仍旧做加法。例如,当n=4的时候,最后的结果应该是-1-2+3-4=-4,因为1、2、4分别是2的0次方、2的1次方、2的2次方。现在请你来计算t次这样的运算。

    Input

    输入第一行是一个正整数t,表示要进行t次运算。接下来t行,每行一个整数n,表示要按新的求和方法计算1到n的和。

    注意:1<=t<=100,1<=n<=10^9。

    Output

    输出t组答案,每个答案占一行。

    Sample Input

    2
    4
    1000000000

    Sample Output

    -4
    499999998352516354
    #include<cstdio>
    #include<cmath>
    long long ci(long long p )
    {
    	long long sum=0;
    	while(p)
    	{
    		p/=2;
    		sum++;
    	}
    	return sum;
    }
    int main()
    {
    int t;
    scanf("%d",&t);
    while(t--)
    {
    	long long  n;
    	scanf("%lld",&n);
    	long long chahe=n*(n-1)/2+n;
    	long long bihe= pow(2,ci(n))-1;
    	printf("%lld
    ",chahe-bihe*2);
    }
    	return 0;
    }

  • 相关阅读:
    一些面试题(2)
    poj1102 7段数码管
    一些面试题(3)
    poj百练2737大整数除法
    枚举
    poj2244 约瑟夫环
    [Craftor原创]精通ModelSim脚本(1)
    [Craftor原创]带FIFO的UART收发器设计
    继电器的一些基本术语
    Every success is a creation for me
  • 原文地址:https://www.cnblogs.com/kingjordan/p/12027187.html
Copyright © 2011-2022 走看看