UVa202 Repeating Decimals

以下代码有错误
1.每处理一个case之前要先重置两个记录的数组
2.注意输出格式。

//循环小数
/*当余数序列出现循环时代表小数循环
故用一个数组记录余数序列,(不对,因为要统计cycle长度,所以选择记录每个余数的位置是第几个余数order。如果位置已经有人了) 
用另一个数组记录小数序列
*/

#include<stdio.h>
#include<string.h>
int pos[3000]={0};//余数最大不会超过三千
int frament[3000];

int main(){
	int a,b;
	
	
	while(scanf("%d%d",&a,&b) == 2){
		//忘记重置pos和frament数组!!!
		memset(pos,0,sizeof(pos)); 
		int remainder;
		int decimal;//小数 
		int ans;
		int count=0; 
		int order=1;
		int cyclelen = 1;
		//什么时候不断的查找下一个余数? 不为零且之前没有出现
		
		remainder = a%b;
		ans = a/b;
	 
 		printf("%d/%d = %d.",a,b,ans);
	 	
		while(remainder && pos[remainder]==0){
			pos[remainder] = order++;
			frament[count++] = (remainder*10)/b;
			remainder = (remainder*10) % b;
		}
		
				
		//如果remainder=0, 
		if(remainder == 0){
		
		for(int i=0;i<count;i++){
			printf("%d",frament[i]);
			}
		printf("(0)\n");
		//repeatcycle = 1;	
		}
		
		else{
			
		int start = pos[remainder]-1; //循环片段第一位出现在.... 
		cyclelen = count - start ;
	
		int i;
		for( i=0;i<start;i++){
			printf("%d",frament[i]);
		}
			
			printf("(");
			if(cyclelen<50){
				
				for(; i<count; i++){
				printf("%d",frament[i]);
				}
				printf(")\n");
			}
			else{
		
			for(; i<50; i++){
				printf("%d",frament[i]);
			}
			printf("...)\n");
			
		}
		
		
			
			
			
		}
		
	
		printf("   %d = number of digits in repeating cycle\n",cyclelen);
		
		
		
		
	}
	
	return 0;
} 

Accept的代码如下:

//循环小数
/*当余数序列出现循环时代表小数循环
故用一个数组记录余数序列,(不对,因为要统计cycle长度,所以选择记录每个余数的位置是第几个余数order。如果位置已经有人了) 
用另一个数组记录小数序列
*/

#include<stdio.h>
#include<string.h>
int pos[3000]={0};//余数最大不会超过三千
int frament[3000];

int main(){
	int a,b;
	
	
	while(scanf("%d%d",&a,&b) == 2){
		//忘记重置pos和frament数组!!!
		memset(pos,0,sizeof(pos)); 
		int remainder;
		int decimal;//小数 
		int ans;
		int count=0; 
		int order=1;
		int cyclelen = 1;
		//什么时候不断的查找下一个余数? 不为零且之前没有出现
		
		remainder = a%b;
		ans = a/b;
	 
 		printf("%d/%d = %d.",a,b,ans);
	 	
		while(remainder && pos[remainder]==0){
			pos[remainder] = order++;
			frament[count++] = (remainder*10)/b;
			remainder = (remainder*10) % b;
		}
		
				
		//如果remainder=0, 
		if(remainder == 0){
		
		for(int i=0;i<count;i++){
			printf("%d",frament[i]);
			}
		printf("(0)\n");
		//repeatcycle = 1;	
		}
		
		else{
			
		int start = pos[remainder]-1; //循环片段第一位出现在.... 
		cyclelen = count - start ;
	
		int i;
		for( i=0;i<start;i++){
			printf("%d",frament[i]);
		}
			
			printf("(");
			if(cyclelen<50){
				
				for(; i<count; i++){
				printf("%d",frament[i]);
				}
				printf(")\n");
			}
			else{
		
			for(; i<50; i++){
				printf("%d",frament[i]);
			}
			printf("...)\n");
			
		}
		
		
			
			
			
		}
		
	
		printf("   %d = number of digits in repeating cycle\n\n",cyclelen);
		
		
		
		
	}
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值