输入两个整数 a, b,输出它们的和。
输入格式
两个以空格分开的整数。
输出格式
一个整数。
输入输出样例
输入 #1
20 30
输出 #1
50
原理:同快速幂算法。
第一次尝试(50分):
#include<bits/stdc++.h>
using namespace std;
int add(int a,int b){
int two=1,ans=a;
while(b){
if(b&1) ans+=two;
two*=2;
b>>=1;
}
return ans;
}
int main(void){
int a,b;
cin >> a >> b;
cout << add(min(a,b),max(a,b));
return 0;
}
下载数据后可以发现,TLE的测试点输入的数都是负数。
在初中学负数的时候,我们知道:
a + b = -(abs(a) + abs(b)) aZ-,b
Z-。
订正(100分):
#include<bits/stdc++.h>
using namespace std;
int add(int a,int b){
int two=1,ans=a;
while(b){
if(b&1) ans+=two;
two*=2;
b>>=1;
}
return ans;
}
int main(void){
int a,b;
cin >> a >> b;
if(a<0 && b<0) a=abs(a),b=abs(b),cout << '-';
cout << add(min(a,b),max(a,b));
return 0;
}