2021 csp-j阅读程序第一题的代码调试时出错
就是说我把真题的代码复制下来,然后手写调试+120进制转二进制,然后就成这样了↓

代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[1000],ans[1001];
string x2(int x){
int i;
string s;
if(x==0) return 0;
while(x){
s[i]=x%2;
x/=2;
i++;
}
reverse(s.begin(),s.end());
return s;
}
int f(int x){
int ret=0;
for(;x;x&=x-1){
ret++;
cout<<"二进制x: "<<x2(x)<<'\n';
cout<<"二进制x-1: "<<x2(x-1)<<'\n';
cout<<"二进制x&x-1: "<<x2(x&x-1)<<'\n';
}
}
int g(int x){
cout<<"二进制x: "<<x2(x)<<'\n';
cout<<"二进制-x: "<<x2(-x)<<'\n';
cout<<"二进制x&-x: "<<x2(x&-x)<<'\n';
return x&-x;
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) ans[i]=f(a[i])+g(a[i]);
for(int i=0;i<n;i++) cout<<ans[i]<<' ';
cout<<'\n';
return 0;
}
原题代码:
01 #include <stdio.h>
02
03 int n;
04 int a[1000];
05
06 int f(int x)
07 {
08 int ret = 0;
09 for(; x; x &= x - 1) ret ++;
10 return ret;
11 }
12
13 int g(int x)
14 {
15 return x & - x;
16 }
17
18 int main()
19 {
20 scanf("%d", &n);
21 for (int i = 0; i < n; i++) scanf("%d", &a[i]);
22 for (int i = 0; i < n; i++)
23 printf("%d ", f(a[i]) + g(a[i]));
24 printf("\n");
25 return 0;
26 }