#include<iostream> using namespace std; int main(){ int a,b; cin>>a>>b; a^=b; b^=a; //交换 a^=b; cout<<a<<" "<<b<<endl; puts(a?"Stan wins.":"Ollie wins."); return 0; }
给定两个正整数,不使用加减乘除符号计算它们的和。
方法:例如,5+17=22,5是101,17是10001。
第一步各位相加得到的结果为10100(不考虑进位)---与异或操作相符;
第二步记下进位,为10---可用&操作来记下;
第三步把前两步的结果相加,得到10110,转换成十进制正好为22.重复上述过程,直到不产生进位为止。
int add(int a,int b) { int sum,tmp; do { sum = a ^ b; tmp = (a & b) << 1; a = sum; b = tmp; }while(tmp != 0); return sum; }
int swap(int &a,int &b) { a = a + b; b = a - b; a = a - b; }
int swap(int &a,int &b) { a ^= b; b ^= a; a ^= b; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
today lazy . tomorrow die .