local Onumber = io.read() -- used for checks !!! DO NOT CHANGE THIS !!!
local number = Onumber
local SubE 
local PostE 

if not Onumber or Onumber:match("^%s*$") then
    print("No input provided")
    os.exit(0)
end











-- Stage 1 (1e303 Limit)

function round()
    number = tonumber(number)
    number = (math.floor(number * 100) / 100)
end

function abv()
    local AmntE = 0
    number = tonumber(number)
    if number > 1e303 then
        print("Greater than 1e300")
        os.exit(0)
    end
    while true do
        number = number / 10
        AmntE = AmntE + 1
        if number < 10 then
            break
        end
    end
    round()
    ConvertedNum = tostring(number .. "e" .. AmntE)
    print(ConvertedNum)
end

-- Stage 2 (Beyond 1e303 to infinity)

local Onumber2 = io.read()

local Numbers = {
    [1] = {var = Onumber, SubE = "", PostE = ""},
    [2] = {var = Onumber2, SubE = "", PostE = ""},
}

function CheckE()
    for _,v in pairs(Numbers) do
        e = string.find(v.var, 'e')
        e = e - 1
    end
end

function findE()
    CheckE()
    if e > 1 then
        print("Only 1 'e' can be used")
        return
    end
    for _,v in pairs(Numbers) do 
        v.SubE = tonumber(string.sub(v.var, 1, string.find(v.var, 'e') - 1))
        v.PostE = tonumber(string.sub(v.var, string.find(v.var, 'e') + 1)) 
    end
end

function SolveForE()
        if SubE2 >= 10 then
        while true do
            SubE2 = SubE2 / 10
            PostE2 = PostE2 + 1
            if SubE2 < 10 then
                break
            end
        end
    end
end

-- Stage 3 (Addition)

function Addition() 
    findE()
    SubE2 = tonumber(Numbers[1].SubE) + tonumber(Numbers[2].SubE)
    if Numbers[1].PostE > Numbers[2].PostE then
        PostE2 = Numbers[1].PostE
    elseif Numbers[1].PostE < Numbers[2].PostE then
        PostE2 = Numbers[2].PostE 
    else
        PostE2 = Numbers[1].PostE
    end
    SolveForE()
    print(SubE2 .. "e" .. PostE2 .. ": Addition")
end

-- Stage 4 (Subtraction)

function Subtraction() -- REDO THIS AS SOON AS POSSIBLE
    findE()
    SubE2 = tonumber(Numbers[1].SubE) - tonumber(Numbers[2].SubE)
    if Numbers[1].PostE < Numbers[2].PostE then
        PostE2 = Numbers[1].PostE
    elseif Numbers[1].PostE > Numbers[2].PostE then
        PostE2 = Numbers[2].PostE 
    else
        PostE2 = Numbers[1].PostE
    end
    SolveForE()
    print(SubE2 .. "e" .. PostE2 .. ": Subtraction")
end

-- Stage 5 (Multiplication)

function Multiplication() 
    findE()
    SubE2 = tonumber(Numbers[1].SubE) * tonumber(Numbers[2].SubE)
    PostE2 = tonumber(Numbers[1].PostE) + tonumber(Numbers[2].PostE)
    SolveForE()
    print(SubE2 .. "e" .. PostE2 .. ": Multiplication")
end

-- Stage 6 (Division)

function Division() 
    findE()
    SubE2 = tonumber(Numbers[1].SubE) / tonumber(Numbers[2].SubE)
    PostE2 = tonumber(Numbers[1].PostE) - tonumber(Numbers[2].PostE)
    SolveForE()
    SubE2 = (math.floor(100*(SubE2))/100)
    print(SubE2 .. "e" .. PostE2 .. ": Division")
end

-- Stage 7 (Power) [ this took WAY to long to figure out ]

function ToPower() 
    findE()
    StringSub = tostring(Numbers[1].SubE)
    StringSub = tonumber(StringSub:sub(1, 1))
    SubE2 = StringSub ^ tonumber(Numbers[2].SubE)
    PostE2 = tonumber(Numbers[1].SubE * 10 ^ Numbers[1].PostE) + tonumber(Numbers[2].SubE * 10 ^ Numbers[2].PostE)
    SolveForE()
    print(SubE2 .. "e" .. PostE2 .. ": Power")
end

-- !!! KEEP AT BOTTOM !!!

function ValuePrint()
    print(Numbers[1].SubE .. "e" .. Numbers[1].PostE .. ": Number 1")
    print(Numbers[2].SubE .. "e" .. Numbers[2].PostE .. ": Number 2")
    Addition() Subtraction() Multiplication() Division() ToPower() 
end

if not string.find(number, 'e') then
     abv()
else 
    findE()
    ValuePrint()
end

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: