分数转化成小数(2018华科计试第三题)

题目描述:

编写程序,接受以N/D形式的分数,输出他们的小数形式,如果小数存在循环节,则用括号括起来,如:1/1.3333333…表示为0.(3)
例如,输入:8/5 1/3 11/13
则输出为:
8/5=1.6
1/3=.(3)
11/13=.(846153)

思路:

手动模拟除法,将每一位小数和每一次余数分别存在两个数组。如果余数为0,说明除法结束,无循环;如果余数中出现相等的情况,说明出现循环节,记录循环节的位置。

代码:

#include
int main()
{
	//n为被除数,d为除数 
	int n,d,i,flag=0;
	//a为正数部分,b为余数,c为每一位小数,k记录循环节位置 
	int a,b[100],c[100],top,k;
	while((scanf("%d/%d",&n,&d))!=EOF)
	{
		top=flag=0;
		//获取正数部分、第一次余数,第一位小数 
		a=n/d;
		b[top]=n%d;
		c[top]=b[top]*10/d;
		//当余数不为0 
		while(b[top]!=0)
		{
			top++;
			//计算下一次余数,下一位小数 
			b[top]=b[top-1]*10%d;
			c[top]=b[top]*10/d;
			//如果余数出现和第一次的余数相等,说明出现循环节 
			for(i=0;i

声明:

如果本算法有什么漏洞或者需要改进的地方,希望读者不吝赐教,大家互相学习共同进步,谢谢。

你可能感兴趣的:(C语言算法,算法,c语言)