#include <stdio.h>
#include <stdlib.h>
int decimal (int m);
int remainder (int m);
int main (void)
{
int x, y, z = 1;
printf("n = ");
scanf("%d", &x);
y = decimal(x);
z = remainder(x);
printf("%d", y);
printf("가장 짧은 순환마디를 가진 분수는 1/%d", z);
}
int decimal (int m)
{
int a, b, c = 1;
while(1)
{
a = a * 10;
b = a % m;
if (b == 1) break;
c = c + 1;
}
return c;
}
int remainder (int m)
{
int i, j, k, l = 1;
int rem[10000] = {0,};
int digits[10000] = {0,};
i = 0;
while (1)
{
rem[i] = l;
l = l * 10;
digits[i] = l / m;
l = l % m;
j = i - 1;
while (j >= 0 && rem[i] != rem[j]) --j;
if (j >= 0) break;
i = i + 1;
}
return i;
}
decimal함수에서 무한루프가 도는거 같은데 왜 그런거지...????
지역함수 초기화를 제대로 못한건가???
while (j >= 0 && rem[i] != rem[j]) --j; 이건 뭐에요?
j가 0보다 크고 rem[i]와 rem [j]가 다르면 j를 1씩 뺀다 - 만약 나머지가 모두 다르면 j가 -1이 되서 한번 더 돌리게 되고 하나라도 같으면 0이 되서 나오게 하는 역할을 한답시고 넣어뒀어요