題目:麗山經典50題-28
設A及B分別代表兩正整數,一般情形,A/B在許多情形下為循環小數 1/7 =0.142857,但如以電腦直接將兩數相除,無法獲得此結果,請設計程式,其輸入為A、B兩正整數,輸出為:如果不是循環小數,則直接印出其商數。如為循小數,則精確的算出其商值,並標出其循環節,可假設其不超過 6位,並可設A<B。
解法:
int a[100],b=1,c=7,i=0;
for(i=0;i<100;i++){
if(b<c) b=b*10;
//還需要判斷 b%c==0時,該怎麼辦?
a[i]=b/c;
b=b%c;
}
printf("\n\n");
//目前已經找到b/c小數點以下100位,接下來要找出循環節??
另一解法: int repetend( //求循环节的函数,返回值为循环长度,共3个参数 int a, //第一个参数为被除数 int b, //第二个参数为除数 char *Str) //第三个参数为用于存循环节每一位的数组指针 {int Rem[255], //用于存余数的整型数组 Div1=a, //把被除数保存下来,因为后面可能会改变被除数的值 Div2=b; //把除数也保存下来,因为后面可能会改变除数的值 if(a==0 or b==0) return 0; //如果被除数或者除数为0,函数返回0值 if(Div1<0) Div1=Div1*-1; //正负并不影响求循环节,所以被除数和除数都取绝对值 if(Div2<0) Div2=Div2*-1; //正负并不影响求循环节,所以被除数和除数都取绝对值 for(;Div1*10another solution