以下代码有错误
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;
}