求助
  • 板块灌水区
  • 楼主LookatSea
  • 当前回复2
  • 已保存回复3
  • 发布时间2024/8/18 12:05
  • 上次更新2024/8/18 15:03:05
查看原帖
求助
943493
LookatSea楼主2024/8/18 12:05

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 }
2024/8/18 12:05
加载中...