浮点型转化为分式结构(方法一)P16

#include

int main() { double number; double fm=0.1; scanf("%lf",&number); double substitute = number; double fz =number*0.1;

//消除小数点,得到未化简的分子与分母
***第一次补充***/*重点:9/100 = 90/1000,故若不是直接进行fm,fz的计算,而是先算小数
位数,然后跳出循环,再去计算fm,fz。此时,小数点位数是否正确无影响。
只要保证包含所输入小数的有效数据,如0.36,那么小数位数至少为两位,0.009,小数位数至少为三位。
原理:如输入0.36,若用pow语句,fm为1000,那么fz=0.36*1000=360,而36/100 == 360/1000,所以为了保证一定含有有效数据,可以将小数位数定义为一个极高值,如6*/
  • 第二次补充*/根据以上原理,可见,并不需要去求小数位数,我们可以直接将分母=1000000,输入小数1000000即可。 (!!!注:该方法为笨方法,浪费算力) do { substitute = substitute - (int)substitute; substitute=10; fm=10; fz*=10; } while ((int)substitute!=0); //
//不断除以公约数,得到化简后的分子与分母
int result;
int control;
int min;
do
{
    //判断大小
    switch (fz>fm) {
        case 1:
            min = fm;
        default:
            min = fz;
    }
    //

    //除以公约数
    /*该处的的思路:假设整个循环结束后都没进入if语句(正确),则为错误,故只要有一次正确就得跳出for循环。
    (正确与错误的判断标准:进入if语句后要再次进行do-while循环,故为正确。)
    由P16的做题思路一可见,一开始要设结果result = 0;
    */
    result = 0;
    for (control =2;control<=min;control++) {
        if ((int)fz % control == 0 && (int)fm % control == 0) {
            fz/=control;
            fm/=control;
            result = 1;
            break;
        }
    }
} while (result);

//输出结果
printf("%f的分式为%d/%d",number,(int)fz,(int)fm);

return 0;

}

JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。