JDOJ2255语法基础:A+B


这是一道语法基础,但是挺有意思的……

题意:不使用"+","-","*","/"计算“A+B”.

SPJ的原理是对代码进行过滤,我认认真真的记了笔记在注释上面然后就因为注释被卡了……

#include <cstdio>
 
//For 2 One-Digit Number in Binary,"x^y" Means "x+y";
//If U want to make it more,Juse use a self-control function,"tx&ty" means whether it will be given to the front(jin4wei4).
 
int a,b;
 
int add(int tx,int ty) {
    if (ty == 0) {
        return tx;
    }
    return add(tx^ty,(tx&ty)<<1);
}
 
int main()
{
    scanf("%d%d",&a,&b);
    printf("%d",add(a,b));
    return 0;
}

解法如下:

1.首先我们先解决局部问题:两个一位二进制数。我们想把他们加在一起。

0+1=1

1+0=1

0+0=0

1+1=10

而我们又发现:

0^1=1

1^0=1

0^0=0

1^1=1

此时我们发现前三种情况已经被我们完美解决了。那么最后一种情况:需要进位的时候怎么办呢?

0&1=false

1&0=false

0&0=false

1&1=true

不难发现,需要进位时这两个数的"&"运算结果为“1”,即“true”。

之后我们愉快的进行递归就可以了~

声明:TonyZhao's Home|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - JDOJ2255语法基础:A+B


不骗了,不骗了。
A Simple OIer fighting tooth and nail.