求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。



题目来源: http://ac.jobdu.com/problem.php?pid=1506

题目描述:

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

输入:

输入可能包含多个测试样例。
对于每个测试案例,输入为一个整数n(1<= n<=100000)。

输出:

对应每个测试案例,
输出1+2+3+…+n的值。

样例输入:
3
5
样例输出:
6
15
//java
 
public static long multi(int n, int m){
		long result = 0;
		long temp = 0;
		boolean flag = (m&1)==1;
		boolean test;
		test=flag && ((result+=m) > 0)&&((n -= 1)>0);		
		test=( n > 0) && ((m <<=1) > 0);
		n >>= 1;
		test=( n > 0) && (temp=multi(n, m)) != 0;
		return result+temp;
	}
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		while(scan.hasNextInt()){
			int n=scan.nextInt();
			long answer = multi(n,n+1);
			answer >>=1 ;
			System.out.println(answer);
		}
		scan.close();
	}

</pre><pre class="java" style="white-space: pre-wrap;" name="code"><span id="_xhe_cursor">typedef unsigned long long UINT64;
</span>

UINT64 multi(UINT64 n, UINT64 m, UINT64 *p)
{
    ((n&1) == 1)&& ((*p +=m) && (n -= 1));
     (n >0)&& ((m<<=1));
     (n >>=1);
    (n>0) && multi(n,m,p);
    return (*p);
}
int main()
{
    int n;
    while(cin >> n)
    {
        UINT64 pathCount=0;
        multi(n,n+1,&pathCount);
        pathCount >>=1;
        cout << pathCount << endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值