社区讨论

程序出bug求助

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lv9l7q33
此快照首次捕获于
2024/04/21 21:52
2 年前
此快照最后确认于
2024/04/22 12:59
2 年前
查看原帖
这是一个化简分数的程序(最下面),但是gf数组没有被赋值过,导致
CPP
for(int i=0;gf[i]!=0;i++){
		cout << gf[i] << " ";
	}
这部分没有输出
CPP
#include <bits/stdc++.h>
using namespace std;
const int max_n=100;
int af[max_n];
int bf[max_n];
int gf[max_n];//公因数
double a,b;//a/b;
void fzsa(int k, int num){// fzs:分解质因数 
	for(int i=2;i<=k;i++){
		if(k%i==0){
			af[num]=i;
			fzsa(k/i,num+1);
			return;
		}
	}
}
void fzsb(int k, int num){// fzs:分解质因数 
	for(int i=2;i<=k;i++){
		if(k%i==0){
			bf[num]=i;
			fzsb(k/i,num+1);
			return;
		}
	}
}
void zgs(){//从这        zgs:查找公因数 
	int gbl=0,abl=0,bbl=0;
	for(int i=2;i<=max(a,b);i++){
		int ai=0,bi=0;
		while(af[abl]==i){
			ai++;//i值数
			abl++;//遍历位置 
		}//检索af[]中的i值数 
		while(bf[bbl]==i){
			bi++;//i值数
			bbl++;//遍历位置 
		}//检索bf[]中的i值数 
		for(int j=gbl;j<=min(ai,bi)+gbl;j++){//将最少的i值数个i添加进去 
			gf[j]=i;
			gbl++;
		}
	}
}//到这是bug所在区域
int main(){
	memset(af,0,sizeof(af));
	memset(bf,0,sizeof(bf));
	memset(gf,0,sizeof(gf));
	cin >> a >> b;
	while(floor(a)!=a || floor(b)!=b){
		a*=10;
		b*=10;
	}
	fzsa(a,0);
	fzsb(b,0);
	cout << a << endl << b << endl;//从这 
	for(int i=0;af[i]!=0;i++){
		cout << af[i] << " ";
	}
	cout << endl;
	for(int i=0;bf[i]!=0;i++){
		cout << bf[i] << " ";
	}
	cout << endl;
	zgs();
	```cpp
	for(int i=0;gf[i]!=0;i++){
		cout << gf[i] << " ";
	}//到这是测试输出
	//把gf里的数相乘分别除分子和分母 还没做

回复

0 条回复,欢迎继续交流。

正在加载回复...