#include <stdio.h>//自测运行失败了,说你自己判断,你是对的就直接去运行,最后一个4字节会溢出,最后我换为了long void fenshujian(long* x1,long* y1,long* x2,long* y2){ //第一个分数减第二个分数,结果放到第一个分数的位置上 long x=0,y=0; y=(*y1)*(*y2); x=(*x1)*(*y2)-(*x2)*(*y1); *x1=x; *y1=y; return ; } int main() { long a, b,tempx=0,tempy=0,beix=1,beiy=0,arr[50]={0},top=0; //数组用来放分子为1,分母为符合的结果 while (scanf("%ld/%ld\n", &a, &b) != EOF) { // 注意 while 处理多个 case // 64 位输出请用 printf("%lld") to tempx=a,tempy=b,beix=1; for(long i=2;;i++){ //从1/2开始 beiy=i; if(tempx*i>=tempy){ //1/2小于真分数,就减去1/2 arr[top++]=i; fenshujian(&tempx,&tempy,&beix,&beiy); //减去1/2 if(tempx==0){ //真分数和1/2相等,直接返回 break; } if(tempy%tempx!=0){ continue; } else{ long dp=0;dp=tempy/tempx; //减去后是分子为一的就返回 arr[top++]=dp; break; } } } for(int i=0;arr[i]!=0;i++){ //输出 printf("1/%ld",arr[i]); if(arr[i+1]!=0){ printf("+"); } } printf("\n"); } return 0; }