题目描述
循环小数就是如同1/3的小数形式0.3333…… ,小数点后的3是无限的,19/99的小数形式为0.1919……,有无限个19循环。
现在你接到一个任务,就是由无限循环小数,还原回最简分数的形式,且0.3333……我们只用循环子串3表示,0.1919……用循环子串19表示。
解答要求
时间限制:1000ms, 内存限制:64MB
输入
输入一个小数的循环子串s,s的长度不超过10。输入为0时结束输入。
输出
输出循环小数的最简分数形式。
样例
输入样例 1 复制
3
19
0
输出样例 1
1/3
19/99
//we have defined the necessary header files here for this problem.
//If additional header files are needed in your program, please import here.
//a=0.xxb,那么10a=x.xxb;相减即可9a=xb;x=9a/b; 0.333...*10=3.333... a=0.333... 10a-a=3 a=3/9=1/3
//a=0.xyxyb,那么100a=xy.xyb;相减即可,99a=xy,xy=99a/b;
//依次类推;
//需要注意的是,样例中有01这样的东西,所以读入分子时候不能读入整数类型,应该按照字符串读入;
//注意最后约分
//求最大公约数,辗转相除法
int gcd(int a,int b)
{
int temp;
while(b)
{
temp=a%b;
a=b;
b=temp;
}
return a;
}
int main(){
int num;
char s[10];
int denominator;
while(scanf("%s",s))
{
if(s[0]=='0'&&s[1]=='\0')
break;
denominator=pow(10,strlen(s))-1; //分母 比如 1/3=3/9=3/(10-1)
num=gcd(denominator,atoi(s)); //字符串转int
printf("%d/%d\n",atoi(s)/num,denominator/num);
}
return 0;
}