栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1930 Dead Fraction

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1930 Dead Fraction

#include <iostream>#include <cmath>#include <cstring>using namespace std;char input[20];int spos, epos;__int64 minup, mindown;__int64 gcd(__int64 a, __int64 b){    if(b == 0) return a;    else return gcd(b, a % b);}void trim(__int64 &up, __int64 &down){    __int64 gcdval;    while((gcdval = gcd(up, down)) != 1)    {        up /= gcdval;        down /= gcdval;    }}bool allZero(){    for(int i = strlen(input) - 4; i >= 2; i--)        if(input[i] != '0') return false;    return true;}int main(){    while(scanf("%s", input) && strcmp(input, "0") != 0)    {         if(!allZero())        { mindown = -1; epos = strlen(input) - 4;  //输入字符串数字位的结束位置 spos = 2;   //小数点后面的起始位置 __int64 up = 0, down = 0, upd = 0,  downd = 0, dupdown; //枚举循环部分的起始位置 for(int t = spos; t <= epos; t++) {     upd = up = 0;     int k = spos;     while(k < t && input[k] == '0') k++; //找到非循环部分第一个不为0的位置     for(; k <= epos; k++)     {         if(k < t) upd = upd * 10 + int(input[k] - '0');   //统计非循环部分的分子值         if(k >= t) up = up * 10 + int(input[k] - '0');     //统计循环部分的分子值     }     downd = pow(10.0, t - spos);      //非循环部分的分母值     down = pow(10.0, epos - spos + 1);      //所有小数部分的分母值     dupdown = pow(10.0, epos - t + 1);      //循环部分的分母值     down = down - down / dupdown;          //制造循环部分小数的最终分母值     if(up != 0) trim(up, down);//约分     if(upd != 0) trim(upd, downd);     //约分     __int64 newup, newdown;     newup = up * downd + down * upd;     newdown = down * downd;     if(newup != 0) trim(newup, newdown); //计算最终结果     if(mindown == -1 || newdown < mindown)       //取分母最小的     {         mindown = newdown;         minup = newup;     } } printf("%I64d/%I64dn", minup, mindown);        }        else printf("0/1n");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375827.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号