### Dead Fraction

Below given code is for deadfr spoj or dead fraction spoj.

**Source : -**http://www.basic-mathematics.com/converting-repeating-decimals-to-fractions.html

__How this problem can be solved :-__**Step 1:**

Let x equal the repeating decimal you are trying to convert to a fraction

**Step 2:**

Examine the repeating decimal to find the repeating digit(s)

**Step 3:**

Place the repeating digit(s) to the left of the decimal point

**Step 4:**

Place the repeating digit(s) to the right of the decimal point

**Step 5:**

Subtract the left sides of the two equations.Then, subtract the right sides of the two equations

As you subtract, just make sure that the difference is positive for both sides

Now let's practice converting repeating decimals to fractions with two good examples

**Example #1:**

What rational number or fraction is equal to 0.55555555555

**Step 1:**

x = 0.5555555555

**Step 2:**

After examination, the repeating digit is 5

**Step 3:**

To place the repeating digit ( 5 ) to the left of the decimal point, you need to move the decimal point 1 place to the right

Technically, moving a decimal point one place to the right is done by multiplying the decimal number by 10.

When you multiply one side by a number, you have to multiply the other side by the same number to keep the equation balanced

Thus, 10x = 5.555555555

**Step 4:**

Place the repeating digit(s) to the right of the decimal point

Look at the equation in step 1 again. In this example, the repeating digit is already to the right, so there is nothing else to do.

x = 0.5555555555

**Step 5:**

Your two equations are:

10x = 5.555555555

x = 0.5555555555

10x - x = 5.555555555 − 0.555555555555

9x = 5

Divide both sides by 9

x = 5/9

__What you have to consider in problem ?__
1. If given fraction is 0.2154... then

Case 1- '4' can be repeating

Case 2- '54' can be repeating

Case 3- '154' can be repeating

Case 4- '2154' can also be repeating

So you have to check for all case and print the one with lowest denominator.

2. If ans is '1' then print "1/1" .

#include <bits/stdc++.h> using namespace std; #define ULL unsigned long long ULL pow_10[19] = {1 , 10 , 100 , 1000 , 10000 , 100000 , 1000000 , 10000000 , 100000000 , 1000000000 , 10000000000LL , 100000000000LL , 1000000000000LL , 10000000000000LL , 100000000000000LL , 1000000000000000LL , 10000000000000000LL , 100000000000000000LL , 1000000000000000000LL}; int main() { while(true){ char s[30] ; scanf("%s",s); if(s[0] == '0' && strlen(s) == 1) break; int len = strlen(s) - 5; int conslen = len; ULL num = 0 , consnum, denomeator , temp; for(int i = 0 , j = 2; i < len ;j++, i++) num = num*10 + s[j] - 48; consnum = num; ULL nume = 999999999999999999LL , deno = 999999999999999999LL; for(int i = 0 ; i<conslen ; i++){ temp = consnum - num / 10; denomeator = pow_10[conslen] - pow_10[len - 1]; ULL gcd = __gcd(temp , denomeator); if((denomeator / gcd) < deno){ deno = denomeator / gcd , nume = temp / gcd; } num/=10; len--; } printf("%llu/%llu\n", nume, deno); } return 0; }