UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。

做这题我经历了几个痛苦的阶段:

(1)因为初始数组开的太小,导致当要存的数过多时覆盖掉了其他内容导致莫名其妙的错误(比如数组a加一个元素导致a中实际没有加而在b中覆盖掉了一个元素)。

(2)格式问题。因为题目没有说清楚,试了多次才ac。以后看输出示例要注意这一点。

(3)关于整除时的处理。因为考虑到分子为零的示例导致整除时的输出多了一个0(比如20/4 = 5.0(0))。

#include
#include
//#include
//using namespace std;

int n, d;//fraction: n/d
int decimals[3333];//log .xyz...
int log[3333];
int main() {
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	while(1 == scanf("%d", &n)) {
		scanf("%d", &d);
		//if((count - 1)) printf("\n");//attention...!
		printf("%d/%d = %d.", n, d, n/d);
		n %= d;
		decimals[1] = 10 * n / d;
		log[1] = n;//log[i] decides decimals[i]
		if(!n) {
			printf("(0)\n   1 = number of digits in repeating cycle\n");
			printf("\n");//attention
			continue;
		}
		n = 10 * n % d;
		int count = 2;//denote n is the count'th n...
		//attention: (1)整除(2)超长
		while(n) {
//			if(count == 65)
//				printf("arrive");
			decimals[count] = 10 * n / d;
			log[count] = n;
			//cout <<"count("<


你可能感兴趣的:(uva,循环小数)