输入两个整数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;
}