这是一个化简分数的程序(最下面),但是gf数组没有被赋值过,导致
for(int i=0;gf[i]!=0;i++){
cout << gf[i] << " ";
}
这部分没有输出
#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里的数相乘分别除分子和分母 还没做