A+B Problem ,全世界除 "hello, world" 和 POJ3800/3801... 外最经典的信息学题目,没有之一!
但是同样是一道题,要求在代码中不出现“+”、“-”、“*”、“/”、“%”五种运算符,我们又能怎样解决?
枚举每一位,用变量 t 记录A和B在这个位的状态和之前是否有进位,并用位运算更新答案。
Pascal的同学们请路过,祝P党早日转C++!
A+B without "+" "-" "*" "/" "%" C++代码:
#include <cstdio>
#include <iostream>
using namespace std;
int a,b,c;
int main()
{
cin>>a>>b;
for(int i=1,t;i<=1<<29;i<<=1)
{
t=1;
if(a&i)t<<=1;
if(b&i)t<<=1;
if(c&i)t<<=1;
switch(t)
{
case 2: c|=i; break;
case 4: c|=i<<1; c=~c; c|=i; c=~c; break;
case 8: c|=i; c|=i<<1; break;
}
}
cout<<c<<endl;
return 0;
}