求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
我发现网上的做法都很神,各种理由编译的巧妙办法,就能间接地利用循环来解决,构造函数 递归什么的。想了好久,脑子里只有位运算。。。终于折腾出来了。
代码真傻,我真的没用循环。。。
#include <stdio.h>
#include <iostream>
using namespace std;
#define LL long long
int p[] = {,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,
,};
int fun(int x)
{
int sum;
sum = x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
sum += x<<;
return sum;
}
int main()
{
int n;
LL ans; while(cin>>n)
{
ans = (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans += (n<<)&fun(((n+)&p[])>>);
ans = ans>>;
cout<<ans<<endl;
}
return ;
}