二进制求和#include<iostream> #include<string> #include<cstring> using namespace std; int func1(string s) { int a=s.size(),b=0; for(int i=a-1;i>=0;i--) { b+=2^i*s[i]; } return b; } string func2(int a) { int i=0; string str,Str; str[0]=a; while(a) { str[i]=a%2; a=a/2; i++; } i--; for(int j=0;j<i;j++,i--) { Str[j]=str[i]; cout<<Str[j]; } cout<<endl; } int main() { string a,b; cin>>a>>b; int a1=func1(a); int b1=func1(b); func2(a1+b1); return 0; }
时间: 2024-03-18 11:40:54 浏览: 75
这段代码是实现二进制加法的,但是存在一些问题。首先,在函数`func2`中,`str`和`Str`都是空的字符串,没有初始化,因此访问它们的元素是非法的。其次,在计算二进制和的过程中,使用了异或运算符`^`,但是应该使用位运算符`&`和`|`来实现二进制加法。
以下是修改后的代码:
```
#include<iostream>
#include<string>
using namespace std;
int func1(string s) {
int a = s.size(), b = 0;
for(int i = a - 1; i >= 0; i--) {
b += (1 << (a - 1 - i)) * (s[i] - '0');
}
return b;
}
void func2(int a) {
string Str = "";
while(a) {
Str = char(a % 2 + '0') + Str;
a = a / 2;
}
cout << Str << endl;
}
int main() {
string a, b;
cin >> a >> b;
int a1 = func1(a);
int b1 = func1(b);
func2(a1 + b1);
return 0;
}
```
在函数`func1`中,使用位运算符`<<`来计算2的幂次方,使用字符`'0'`来将字符型数字转为整型数字。
在函数`func2`中,每次将余数加到字符串头部,最后输出即可。
阅读全文