题解 | #将真分数分解为埃及分数#

将真分数分解为埃及分数

http://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b

#include <stdio.h>
#include <string.h>
//学习一种分解方式吧,主要还是ab互质后分解
//b=a*q+r然后上下同乘q+1 拆出1/q+1来
int gcd(int a, int b);

int main()
{
  int a, b;
  while (scanf("%d/%d", &a, &b) != EOF)
  {
    int under[b];
    int top = -1;
    int q, r, div;

    div = gcd(a, b);
    a /= div, b /= div;
    if (a == 1)
    {
      under[++top] = b;
    }
    else
    {

      while (a != 1)
      {
        q = b / a, r = b % a;
        under[++top] = q + 1;
        a = a - r;
        b = b * (q + 1);
        div = gcd(a, b);
        a /= div, b /= div;
      }

under[++top] = b;

    }

    for (int i = 0; i <= top; i++)
    {
      if (i != 0)
        printf("+");
      printf("1/%d", under[i]);
    }
    printf("\n");
  }
  return 0;
}

int gcd(int a, int b)
{
  int t;
  while (b != 0)
  {
    t = a % b;
    a = b;
    b = t;
  }
  return a;
}
全部评论

相关推荐

10-29 16:42
门头沟学院 Java
1.今天什么国标的公司打电话约面试,还得准备ppt,好麻烦,网上查薪资一般,打算拒了,不面了2.字节又复活了,什么安全开发,也不知道怎么样,面一面试试吧,还是挺想去字节的,但好难,随缘吧所以今天没面试
嵌入式的小白:面试前可以好好准备下 1.看看你投递的岗位的岗位描述,分析下是哪个业务线,同使要罗列他们描述中提到的技术点 2.根据1中的两点准备 3.岗位描述中应该还有语言要求,这个刷刷八股,要是对自己语言能力很有把握,那就不用看这点了 4.找下你简历中项目部分,看有没有和岗位描述中技术点重合的,这种在面试提到项目时,是高概率问题 好好准备,祝你面试顺利
我的求职进度条
点赞 评论 收藏
分享
10-16 15:48
算法工程师
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务