#include<iostream> #include<cstdio> using namespace std; int main() { int n; cin>>n; int z[101],m[101],s=1,sum=0,x,yu; for(int i=0;i<n;i++) { scanf("%d/%d",&z[i],&m[i]); } for(int i=0;i<n;i++) s*=m[i]; for(int i=0;i<n;i++) { z[i]*=s; z[i]/=m[i]; } for(int i=0;i<n;i++) { sum+=z[i]; } x=int(sum/s); yu=sum%s; for(int i=2;;i++) { if(yu%i==0&&s%i==0) { yu/=i; s/=i; } } cout<<x<<" "<<yu<<"/"<<s<<endl; return 0; }改错
时间: 2024-01-07 07:03:53 浏览: 96
代码中存在一个死循环,因为没有在循环中添加终止条件。另外,为了避免除数为0的情况,需要在计算的过程中注意判断。
以下是修改后的代码:
```c++
#include<iostream>
#include<cstdio>
using namespace std;
int main() {
int n;
cin>>n;
int z[101],m[101],s=1,sum=0,x,yu;
for(int i=0;i<n;i++) {
scanf("%d/%d",&z[i],&m[i]);
}
for(int i=0;i<n;i++) {
s*=m[i];
}
for(int i=0;i<n;i++) {
z[i]*=s;
z[i]/=m[i];
}
for(int i=0;i<n;i++) {
sum+=z[i];
}
x=int(sum/s);
yu=sum%s;
for(int i=2;i<=yu&&i<=s;i++) { // 添加终止条件
if(yu%i==0&&s%i==0) {
yu/=i;
s/=i;
i--; // 如果可以约分,需要重新检查当前i的值
}
}
cout<<x<<" "<<yu<<"/"<<s<<endl;
return 0;
}
```
阅读全文