/*
Online Java - IDE, Code Editor, Compiler

Online Java is a quick and easy tool that helps you to build, compile, test your programs online.
*/

// can not use recursion...

public class Main
{
    public static void main(String[] args) 
    {
        System.out.println("Welcome to Online IDE!! Happy Coding :)");
        
        System.out.println("This is answer:" + expandedForm(257.48));
    }
    
    public static String expandedForm(Double number)
    {
        String createString=null;
        
        String convertedNumber = Double.toString(number); 
       
        //problem has to be treated as two parts... string before and after decimal place.
        
        int positionDecimalPoint= convertedNumber.indexOf('.');   //zero based notation  it would be 3 in above example
        int remainingChars;
        int roundedNearestUnit;
        int count=1;
        int posAfter=1;
        Double remainingPart=0.0;
        Boolean processedNonMantissa=false;
        
        String charsBeforeDecimal = convertedNumber.substring(0,positionDecimalPoint);
        String charsAfterDecimal = convertedNumber.substring(positionDecimalPoint+1,convertedNumber.length());
        
        int lengthCharsBeforeDecimal = charsBeforeDecimal.length();
        int lengthCharsAfterDecimal =  charsAfterDecimal.length();
        
        System.out.println(charsBeforeDecimal);
        System.out.println(charsAfterDecimal);
        
        do
        {
        
            System.out.println("conversion: " + convertedNumber);
            remainingChars = convertedNumber.length();
            
            // when trying to cast, unfortunately it failed to pick up first Character
            // it picked up two characters....
            //int prefix = (int)(convertedNumber.charAt(0));
            
            int prefix;
            String format=null;
            int denominator;
            char numerator;
            String finalNumber;
            
            
            prefix = Character.getNumericValue(convertedNumber.charAt(0));
            System.out.println("prefix22:  " + prefix);
            System.out.println("******* " + remainingPart);
            System.out.println("LENGTH***: " + convertedNumber.length());
            System.out.println("LENGTH after decimal***: " + lengthCharsAfterDecimal);
            
            convertedNumber=convertedNumber.substring(1,remainingChars);
            remainingPart = Double.parseDouble(convertedNumber);
            
            System.out.println("This i ccurrent length:" + convertedNumber.length());
    
            if (prefix==-1)   // since its appending 0
            {
                if (lengthCharsAfterDecimal==1)
                {
                    denominator = posAfter * 10;
                    finalNumber = convertedNumber.charAt(0) + "/" + denominator;
                    
                    return createString +  finalNumber;
                }
                
                denominator = posAfter * 10;
                numerator = (char) prefix;
                format = convertedNumber.charAt(0) + "/" + denominator;
                System.out.println("after decimal:" + format);
                
                posAfter++;
                System.out.println("REEEMAIJING: " + remainingChars);
                
                convertedNumber=convertedNumber.substring(1,convertedNumber.length());
                System.out.println("NEW NEW NEW: " + convertedNumber);
                remainingPart = Double.parseDouble(convertedNumber);
                
                System.out.println("NEW NEW NEW REMAINING: " + remainingPart);
                
                System.out.println("THIS IS CREATE STRING: " + createString);
                
                return format + expandedForm(remainingPart);
            }
                    
            System.out.println("CHECK********************");
            System.out.println("length number: " + convertedNumber.length());
            System.out.println("length decimal: " +lengthCharsAfterDecimal);
            
            
            if (convertedNumber.length()>lengthCharsAfterDecimal+1)  // this would be 3 in  257.24
            {
                
            //need to create alternate int and round down nearest 100
            //need to know number remaining chars in String
            
            
            // Now remaining characters is used in  10 ^  remainingChars
            // for instance  247  will give  2 x (10 ^ 2) = 200
            
            roundedNearestUnit =  (int) (Math.pow(10,lengthCharsBeforeDecimal-count) * prefix);
            System.out.println("rounded down:" + roundedNearestUnit);
            
            System.out.println("processing: " + convertedNumber);
            count++;
            
            createString = Integer.toString(roundedNearestUnit);
            
            System.out.println("This is remaining part:" + remainingPart);
            
            String remainder = remainingPart.toString();
            
            
            
            return (remainingPart<10 && convertedNumber.charAt(0)!='.') ?   createString + " + " +  (remainder.substring(0,remainder.indexOf('.')))  + " + "  + expandedForm(remainingPart) :  createString + " ++ " +  expandedForm(remainingPart);
            
            //System.out.println("TO return: " +  createString);
            
            //return createString + " + "  + expandedForm(remainingPart);
    
        }
        
        
    }while(convertedNumber.length()>1);
        
        
        return null;
        
    }
    
}
