#include <iostream>
#include <iomanip>
#include <sstream>
#include <vector>
 
int main()
{
    std::vector<double> numbers {
    	3.141516, 1.01, 200.78901, 0.12345, 9.99999
    };
 
    for (auto x : numbers)
    {
    	// "print" the number
    	std::stringstream ss;
    	ss << std::fixed << std::setprecision(4) << x;
 
    	// remove the unwanted zeroes
    	std::string result{ss.str()};
    	while (result.back() == '0')
    		result.pop_back();
 
    	// remove the separator if needed	
    	if (result.back() == '.')
    		result.pop_back();
 
        std::cout << result  << '\n';
    }
 
    std::cout << "\nJustified:\n";
    for (auto x : numbers)
    {
    	// "print" the number
    	std::stringstream ss;
    	ss << std::fixed << std::setprecision(4) << std::setw(15) << x;
 
    	// remove the unwanted zeroes
    	std::string result{ss.str()};
    	auto it = result.rbegin();
    	while (*it == '0')
    		*it++ = ' ';
 
    	// remove the separator if needed	
    	if (*it == '.')
    		*it = ' ';
 
        std::cout << result  << '\n';
    }
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4gbnVtYmVycyB7CiAgICAJMy4xNDE1MTYsIDEuMDEsIDIwMC43ODkwMSwgMC4xMjM0NSwgOS45OTk5OQogICAgfTsKCiAgICBmb3IgKGF1dG8geCA6IG51bWJlcnMpCiAgICB7CiAgICAJLy8gInByaW50IiB0aGUgbnVtYmVyCiAgICAJc3RkOjpzdHJpbmdzdHJlYW0gc3M7CiAgICAJc3MgPDwgc3RkOjpmaXhlZCA8PCBzdGQ6OnNldHByZWNpc2lvbig0KSA8PCB4OwogICAgCQogICAgCS8vIHJlbW92ZSB0aGUgdW53YW50ZWQgemVyb2VzCiAgICAJc3RkOjpzdHJpbmcgcmVzdWx0e3NzLnN0cigpfTsKICAgIAl3aGlsZSAocmVzdWx0LmJhY2soKSA9PSAnMCcpCiAgICAJCXJlc3VsdC5wb3BfYmFjaygpOwogICAgCQkKICAgIAkvLyByZW1vdmUgdGhlIHNlcGFyYXRvciBpZiBuZWVkZWQJCiAgICAJaWYgKHJlc3VsdC5iYWNrKCkgPT0gJy4nKQogICAgCQlyZXN1bHQucG9wX2JhY2soKTsKICAgIAkJCiAgICAgICAgc3RkOjpjb3V0IDw8IHJlc3VsdCAgPDwgJ1xuJzsKICAgIH0KICAgIAogICAgc3RkOjpjb3V0IDw8ICJcbkp1c3RpZmllZDpcbiI7CiAgICBmb3IgKGF1dG8geCA6IG51bWJlcnMpCiAgICB7CiAgICAJLy8gInByaW50IiB0aGUgbnVtYmVyCiAgICAJc3RkOjpzdHJpbmdzdHJlYW0gc3M7CiAgICAJc3MgPDwgc3RkOjpmaXhlZCA8PCBzdGQ6OnNldHByZWNpc2lvbig0KSA8PCBzdGQ6OnNldHcoMTUpIDw8IHg7CiAgICAJCiAgICAJLy8gcmVtb3ZlIHRoZSB1bndhbnRlZCB6ZXJvZXMKICAgIAlzdGQ6OnN0cmluZyByZXN1bHR7c3Muc3RyKCl9OwogICAgCWF1dG8gaXQgPSByZXN1bHQucmJlZ2luKCk7CiAgICAJd2hpbGUgKCppdCA9PSAnMCcpCiAgICAJCSppdCsrID0gJyAnOwogICAgCQkKICAgIAkvLyByZW1vdmUgdGhlIHNlcGFyYXRvciBpZiBuZWVkZWQJCiAgICAJaWYgKCppdCA9PSAnLicpCiAgICAJCSppdCA9ICcgJzsKICAgIAkJCiAgICAgICAgc3RkOjpjb3V0IDw8IHJlc3VsdCAgPDwgJ1xuJzsKICAgIH0KfQ==