//算法总结:
//对于a / b
//它的余数最多只有b种(即从0到b-1)
//所以当被除数c在前面出现过时,则表示出现了循环节
//循环节即为上一个c的位置到当前c的位置中间的部分
这道题总体不算难,并且目前网上已经有很多题解啦,但我还是受到巧妙数学算法和数学规律的震撼,所以就发表这篇博文啦。
同时自己也要多学习学习标记数组的用法。
#include#include #define MAXN 10005 int ans[MAXN] , judge[MAXN] ;//judge数组用来记录每个被除数出现的位置 int main () { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int first = 1; int a,b; while(scanf("%d %d",&a,&b)!=EOF) { memset(judge,0,sizeof(judge)); int i = 1,j;//i是被除数的位置变量 printf("%d/%d = %d.",a,b,a/b); a %= b; while(!judge[a]) { judge[a] = i; a *= 10; ans[i] = a / b; i++; a %= b; } for(j=1;j



