題目:麗山經典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*10

another solution