It is possible to show that the square root of two can be expressed as an infinite continued fraction.
2 = 1 + 1/(2 + 1/(2 + 1/(2 + ... ))) = 1.414213...
By expanding this for the first four iterations, we get:
1 + 1/2 = 3/2 = 1.5
1 + 1/(2 + 1/2) = 7/5 = 1.4
1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666...
1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379...
The next three expansions are 99/70, 239/169, and 577/408, but the eighth expansion, 1393/985, is the first example where the number of digits in the numerator exceeds the number of digits in the denominator.
In the first one-thousand expansions, how many fractions contain a numerator with more digits than denominator?
#define N 1000
#define M 100
void add(int mo[],int de[]);
void assignment(int dv[],int de[]);
bool check(int mole[], int denom[]);
bool check(int mole[], int denom[])
{
char lmo[5],lde[5];
for (int i = 0; mole[i] != 0;i++);
i--;
sprintf(lmo,"%d",mole[i]);
sprintf(lde,"%d",denom[i]);
if (denom[i] == 0)
{
return true;
}
if (strlen(lmo)>strlen(lde))
{
return true;
}
return false;
}
void add(int mo[],int de[])
{
for (int i =0,d = 0,temp = 0; i < M ; i++)
{
temp = de[i]+mo[i]+d;
de[i] = temp%10000;
d = temp/10000;
}
}
void assignment(int dv[],int de[])
{
for (int i = 0; i < M; i++)
{
dv[i] = de[i];
}
}
int main()
{
clock_t ts,te;
ts=clock();
int answer = 0;
int mole[M]={0},denom[M]={0},d_val[M]={0};
int n;
for (n = 1,mole[0] = 3,denom[0] = 2,d_val[0] = 0; n <= N;n++)
{
if (check(mole,denom) == true)
{
answer++;
}
assignment(d_val,denom);
add(mole,denom);
add(denom,d_val);
assignment(mole,d_val);
}
printf("\nanswer %d",answer);
te=clock();
printf("\ntime difference: %ds\n",(te-ts)/CLOCKS_PER_SEC);
getchar();
return 0;
}