小数循环节

输入两个整数A和B,输出算术运算A÷B的结果,小数部分如果有循环节,用”( )”标出。例如:80/13=6.(153846)

输入格式

一行2个正整数A和B,范围[1,10000]。

输出格式

一个表达式,如果小数有循环节,用括号表示。

输入/输出例子1

输入:

12 6

输出:

2

输入/输出例子2

输入:

13 12

输出:

1.08(3)

样例解释

具体代码

#include<stdio.h>
#include<bits/stdc++.h>
int res[3005], mod[3005];//res数组记录每一次的商,mod数组记录每一次的余数 
int main() {
	int a, b;
	scanf("%d%d", &a, &b) ;
		int i = 0, j;
		int flag = 0;//标记是否找到了循环节 
		printf("%d", a / b);//先输出整数部分 
		while (true) {
			res[i] = a / b;
			mod[i] = a % b;
			a = (a%b) * 10; //将这次的余数乘以十作为下一次的被除数 
			for (j = 1; j < i; j++) {  //与前面出现的商和余数进行比较;注意是从j=1,即小数点后进行比较 
				if ((res[j] == res[i]) && (mod[j] == mod[i])) { //若余数和商的组合在前面出现过,则表示出现循环节 
					flag = 1; //此时的i为第二次出现循环节的开头第一个数字的位置 
					break;
				}
			}
			if (flag) {
				break;
			}
			i++;
		}
		if(mod[1]==0)return 0;
		printf(".");
		for (int k = 1; k < j; k++) { //注意到res[0]中存储的是整数部分 
			printf("%d", res[k]); //输出小数点后非循环节部分 
		}
		if(mod[j]==0)return 0;
		printf("(");
		for (int k = j; k < i; k++) 
        {
			printf("%d", res[k]);
		}
		printf(")\n");
		//注意输出格式,循环节长度前有三个空格,末尾两个换行符
	
	

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值