0
点赞
收藏
分享

微信扫一扫

紫书习题3-8循环小数

天蓝Sea 2022-02-02 阅读 74

题目:https://www.luogu.com.cn/problem/UVA202

思路
首先要搞清楚怎么确定循环小数的位数,这点要根据被除数是否相等确定
剩下的就是把a/b的每一个结果存到数组里面,最多存五十位就够了(题目要求)
最后就是按格式输出

#include<iostream>
#include<cstring>
using namespace std;

int ans[100],num[30010];

int main(){
	
	int a,b;
	while(scanf("%d%d",&a,&b) != EOF){
		memset(num,0,sizeof(num));
		printf("%d/%d = %d.",a,b,a/b);
		a = a%b;
		int k = 1,t = 1;
		while(true){
			
			a*=10;
			if(k<=50)
				ans[k++] = a/b;
			if(num[a]){
				int i;
				for(i = 1;i<num[a] && i<= 50;i++) printf("%d",ans[i]);
				printf("(");
				for(;i<t && i <= 50;i++) printf("%d",ans[i]);
				if(t>50){
					printf("...");
				}
				printf(")\n");
				printf("   %d = number of digits in repeating cycle\n\n",t-num[a]);
				break;
			}else num[a] = t;
			t++;
			a = a%b;
		}
		
		
	}
	
	return 0;
}
举报

相关推荐

0 条评论