Ordered Fractions 运行超时啊~

来源:互联网 发布:淘宝寿衣门女主角 编辑:程序博客网 时间:2024/06/06 19:55
#include<fstream>#include<iostream>#include<string>#include<math.h>using namespace std;int myitoa(int data, string* p, int num)  {      if (p == NULL)      {          return -1;      }      if (data < 0)      {          *p++ = '-';          data = 0 - data;      }      int temp = 0;      int flag = 0; //标志位 0-不存储 1-存储       if (num == 10)      {//十进制           for (int i = 0; i < 10; i++)          {              temp = static_cast<int>(data / pow(10.0, 9-i));// pow(i,j),求i的j次方,temp取得当前最高位               if (temp != 0)  //去掉最前面的0               {                  flag = 1;//将标志位变为1,可以存储               }              if (flag != 0)              {                  //*p++ = temp + '0';  //变成字符*p+= temp + '0';  //变成字符                   data = data % static_cast<int>(pow(10.0, 9-i));              }          }      }  } bool hasgy(int i,int j){for(int k=2;k<=i;k++){if(i%k==0 && j%k==0)return false;}return true;}int main(){ifstream fin ("frac1.in");ofstream fout ("frac1.out");int n,i,j,k=0;float a[10000];string zi[20000];string mu[20000];fin>>n;for(i=2;i<=n;i++)//i:分母{for(j=1;j<i;j++)//j:分子{if((hasgy(i,j))&&(i%j!=0 || j==1))//保证既约{a[k]=(float)j/i;myitoa(j,zi+k,10);myitoa(i,mu+k,10);k++;}}}for(i=0;i<k;i++){for(j=i+1;j<k;j++){if(a[i]>a[j]){float temp;temp=a[i];a[i]=a[j];a[j]=temp;string tempc;tempc=zi[i];zi[i]=zi[j];zi[j]=tempc;tempc=mu[i];mu[i]=mu[j];mu[j]=tempc;}}}fout<<"0/1"<<endl;for(i=0;i<k;i++)fout<<zi[i]<<'/'<<mu[i]<<endl;fout<<"1/1"<<endl;return 0;}