题解
2024-08-18 14:59:21
发布于:上海
13阅读
0回复
0点赞
超级麻烦,懒得打注释了,自行观看,挑战不用注释做到最麻烦
#include <iostream>
using namespace std;
string cin_math(){
string a;
cin>>a;
return a;
}
bool carry(char a,char b){
if (a+b-'0'>'1')return 1;
return 0;
}
string binary_plus(string a,string b){
string sum="";
if (a.size()<b.size()){
int a1=b.size()-a.size();
for (int i=0;i<a1;i++){
a="0"+a;
}
}else{
int b1=a.size()-b.size();
for (int i=0;i<b1;i++){
b="0"+b;
}
}
bool f=0;
char c;
for (int i=a.size()-1;i>=0;i--){
if (f){
if (carry(a[i],b[i]+1)){
c=a[i]+b[i]-'1';
sum=c+sum;
f=1;
}else{
c=a[i]+b[i]+1-'0';
sum=c+sum;
f=0;
}
}else{
if (carry(a[i],b[i])){
c=a[i]+b[i]-'2';
sum=c+sum;
f=1;
}else{
c=a[i]+b[i]-'0';
sum=c+sum;
f=0;
}
}
}
if (f){
sum="1"+sum;
}
return sum;
}
string to_binary(string a){
string b="",s="";
while (a!="0"){
if((a[a.size()-1]-'0')%2){
b="1"+b;
a[a.size()-1]=a[a.size()-1]-1;
}
else b="0"+b;
if (a=="0")break;
s="";
int l=0;
int sum=0;
if (a[l]-'0'<2){
sum=a[l]-'0';
l++;
}
for (int i=l;i<a.size();i++){
sum=sum*10+a[i]-'0';
if (sum%2){
s+=sum/2+'0';
sum=1;
}else{
s+=sum/2+'0';
sum=0;
}
}
int j=0;
string s1="";
while (j<s.size()&&s[j]=='0'){
j++;
}
int len=0;
for (int i=j;i<s.size();i++){
s1+=s[i];
}
a=s1;
if (s=="")break;
}
return b;
}
bool carry_dec(char a,char b){
if (a+b-'0'>'9')return 1;
return 0;
}
string to_decimalism(string s){
string pow="1";
string ans="0";
for (int i=s.size()-1;i>=0;i--){
if (s[i]=='0'){
int car=0;
string sum="";
char c;
for (int i=pow.size()-1;i>=0;i--){
if (car){
if (carry_dec(pow[i],pow[i]+car)){
c=(pow[i]*2-'0'*2+car)%10+'0';
sum=c+sum;
car=(pow[i]*2-'0'*2+car)/10;
}else{
c=pow[i]*2-'0'+car;
sum=c+sum;
car=0;
}
}else{
if (carry_dec(pow[i],pow[i])){
c=(pow[i]*2-'0'*2)%10+'0';
sum=c+sum;
car=(pow[i]*2-'0'*2)/10;
}else{
c=pow[i]*2-'0';
sum=c+sum;
car=0;
}
}
}
if (car){
c=car+'0';
sum=c+sum;
}
pow=sum;
continue;
}
string a=pow;
string b=ans;
string sum="";
if (a.size()<b.size()){
int a1=b.size()-a.size();
for (int i=0;i<a1;i++){
a="0"+a;
}
}else{
int b1=a.size()-b.size();
for (int i=0;i<b1;i++){
b="0"+b;
}
}
bool f=0;
char c;
for (int i=a.size()-1;i>=0;i--){
if (f){
if (carry_dec(a[i],b[i]+1)){
c=a[i]+b[i]-'9';
sum=c+sum;
f=1;
}else{
c=a[i]+b[i]+1-'0';
sum=c+sum;
f=0;
}
}else{
if (carry_dec(a[i],b[i])){
c=a[i]+b[i]-'9'-1;
sum=c+sum;
f=1;
}else{
c=a[i]+b[i]-'0';
sum=c+sum;
f=0;
}
}
}
if (f){
sum="1"+sum;
}
ans=sum;
int car=0;
sum="";
for (int i=pow.size()-1;i>=0;i--){
if (car){
if (carry_dec(pow[i],pow[i]+car)){
c=(pow[i]*2-'0'*2+car)%10+'0';
sum=c+sum;
car=(pow[i]*2-'0'*2+car)/10;
}else{
c=pow[i]*2-'0'+car;
sum=c+sum;
car=0;
}
}else{
if (carry_dec(pow[i],pow[i])){
c=(pow[i]*2-'0'*2)%10+'0';
sum=c+sum;
car=(pow[i]*2-'0'*2)/10;
}else{
c=pow[i]*2-'0';
sum=c+sum;
car=0;
}
}
}
if (car){
c=car+'0';
sum=c+sum;
}
pow=sum;
}
return ans;
}
int main(){
string a,b;
a=cin_math();
b=cin_math();
a=to_binary(a);
b=to_binary(b);
string c=binary_plus(a,b);
cout<<to_decimalism(c);
return 0;
}
全部评论 1
just soso
2024-08-18 来自 上海
0
有帮助,赞一个