第三个点一直错,为什么,求求了

#include <iostream>
#include <cstring>
using namespace std;
void swap(int &a,int &b)
{
int t;
t=a;
a=b;
b=t;
}
int gcd(int a,int b) //greatest common divisor最大公约数
{ if(a<b)
swap(a,b);
int r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
return b;

}
int main()
{ string str;
int a[10000]={
0,0,0
},b[10000];
while(getline(cin,str))
{

int l=str.length();

if(str[0]=='[')//连分数
{ int j=0,isNum=0;

int fz=0,fm=1,n;
for(int i=0;i<l;i++)
{ n=0;
isNum=0;
while(str[i]>='0'&&str[i]<='9')
{ isNum=1;
n=(str[i]-'0')+n*10;
i++;
}
if(isNum==1)
b[j++]=n;

}
j--;
for(int i=j;i>0;i--)
{
fz+=fm*b[i];
swap(fz,fm);

}
fz+=fm*b[0];
int gg=gcd(fz,fm);
fz=fz/gg;
fm=fm/gg;
if(fm==1)
cout<<fz<<endl;
else
cout<<fz<<"/"<<fm<<endl;
}
else{
int i=0,fz,fm=1,n=0,isfm=0;
while(str[i])
{

if(str[i]=='/')
{ fz=n;
n=0;
i++;
isfm=1;
continue;
}
n=(str[i]-'0')+n*10;
i++;
}
if(isfm==1)
fm=n;
else
{
fz=n;
fm=1;
}

int j=0;
while(1)
{int t=fz/fm;
a[j++]=t;
fz=fz-t*fm;
if(fz==0)
{
break;
}
swap(fz,fm);
}

for(int i=0;i<j;i++)
{
if(i==0)
{
cout<<"["<<a[i];
}
else if(i==1)
cout<<";"<<a[i];
else{
cout<<","<<a[i];
}

}
cout<<"]"<<endl;;

}
}

return 0;
}

0 条评论

目前还没有评论...

信息

ID
1696
难度
7
分类
其他 | 数学模拟 点击显示
标签
递交数
5153
已通过
1139
通过率
22%
被复制
3
上传者