现有若干1欧姆的电阻,用串联和并联的方式做出给定阻值的电阻。而且要求用尽量少的电阻。 每行有两个数字a和b,表示需要构造出阻值为a/b欧姆的电阻。

 ###### 问题遇到的现象和发生背景
木木有一天有幸来到宇航局面试,然而宇航局出了一个难题,只给木木一大堆1的电
阻,要木木用串联和并联的方式做出给定阻值的电阻。而且要求用尽量少的电阻。
输入
输入数据会有多组数据。每组数据占一行。
每行有两个数字a和b,表示需要构造出阻值为a/b欧姆的电阻。
这里ab有
1<=a,b<=1018
当a,b都等于0输入结束,并且这组数据不需要处理
输出
对于每一组数据,输出只占一行。
每行输出一个数字min,表示最少需要多少个1的电阻可以组合出阻值为a/b欧姆电阻
样例输入
12
21
00
样例输出
2
2
 ###### 问题相关代码,请勿粘贴截图

 ###### 运行结果及报错内容

 ###### 我的解答思路和尝试过的方法

 ###### 我想要达到的结果

参考如下:

#include <stdio.h>
int main()
{
    int a,b;
    int cl,bl; //串联个数、并联个数
    int mmin;
    double c,d;
    while(1)
    {
        scanf("%d%d",&a,&b);
        if(a==0 && b==0)
            break;
        cl=1018;
        bl=1018;
        mmin = cl+bl;
        for (cl=0;cl<=1018;cl++)
        {
            for (bl=1;bl<=1018;bl++)
            {
                c = 1.0/bl; //并联电阻
                if( (cl + c == 1.0*a/b) && (cl+bl < mmin) )
                    mmin = cl+bl;
            }
        }
        printf("%d\n",mmin);
    }
    return 0;
}

#include<stdio.h>

 #include<string.h>

  #include<algorithm>

 using namespace std;//  namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

  int main()//整数数据类型 

 {

    long long a,b,x,tmp;//定义长整型变量 

    scanf("%I64d%I64d",&a,&b);//输入 

   tmp=0;//赋初值0 

   if (a<b) swap(a,b);//转换为假分数形式,即分子大于分母 ;两个互为倒数的阻值 在单位电阻的构成上仅最后一步的串并联不同,故其个数相同 
 
   while (b!=0) //b不等于0时
  
   {   

     tmp+=a/b;//对tmp累加每次循环后的a/b值 ,复合赋值运算符 

     x=a%b; a=b; b=x;//x为a/b的余数 ,此时分数形式用上一次循环的a,b表示即为(b/(a除以b后的余数)),当a/b为整数即无余数时终止循环 

  }  
  
   printf("%I64d\n",tmp);//64位的长整型整数输出,并换行 

   return 0;//表示该程序运行结束后,正常退出

}