Help me with my chemistry homework!
R, 70 bytes



function(s)sub("e","*10^",format(eval(parse(t=s)),sc=!grepl("\\^",s)))


Try it online!

An anonymous function. Takes input as a string and outputs as a string.

This function evaluates the string eval(parse(t=s)), then formats it, with the flag scientific set to whether the string contains a ^ or not. Then it replaces e with *10^ to match the right output spec.