zhangjian110518
BAN USERstd::string addTwoBinaryStrings(std::string a, std::string b)
{
int len1=a.size(), len2=b.size();
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int t=min(len1, len2);
int carry=0;
string res="";
for (int i=0; i<t; ++i) {
int m=a[i]-'0';
int n=b[i]-'0';
int p=m+n+carry;
switch (p) {
case 3:
res+="1";
carry=1;
break;
case 2:
res+="0";
carry=1;
break;
case 1:
res+="1";
carry=0;
break;
case 0:
res+="0";
carry=0;
break;
default:
break;
}
}
char num[10];
if (len1>t) {
for (int i=t; i<len1; ++i) {
int m=a[i]-'0';
if (m+carry>1) {
res+="1"; carry=1;
}
else {
itoa(m+carry, num, 10);
res+=num;
carry=0;
}
}
}
if (len2>t) {
for (int i=t; i<len2; ++i) {
int m=b[i]-'0';
if (m+carry==2) {
res+="0"; carry=1;
}
else if (m+carry==3) {
res+="1"; carry=1;
}
else {
itoa(m+carry, num, 10);
res+=num;
carry=0;
}
}
}
reverse(res.begin(), res.end());
return res;
}
void dfs(int arr[], int &cnt, int sum)
{
if (sum<0) return;
if (sum==0) {
for (size_t i=0; i<cnt; ++i) {
cout<<arr[i]<<" ";
}
cout<<endl;
}
for (int i=1; i<=sum; ++i) {
arr[cnt++]=i;
dfs(arr, cnt, sum-i);
cnt--;
}
}
void solve(int n)
{
int arr[100];
int cnt=0;
for (int i=1; i<n; ++i) {
cnt=0;
arr[cnt++]=i;
dfs(arr, cnt, n-i);
}
}
correct the code
- zhangjian110518 April 28, 2013