Go | Golang | Prefix | Suffix | TotalDigits Count | TrailingZeroes | Math
```\nfunc abbreviateProduct(left int, right int) string {\n    product, trailingZeros, totalDigitsInProduct := 1, 0, 0.0\n    maxSuffix:=100000000000\n    maxPr
```\nfunc abbreviateProduct(left int, right int) string {\n    product, trailingZeros, totalDigitsInProduct := 1, 0, 0.0\n    maxSuffix:=100000000000\n    maxPrefix:=100000\n\tprefix := 1.0\n\n\tfor i := left; i <= right; i++ {\n\t\tproduct *= i\n        totalDigitsInProduct += math.Log10(float64(i))\n        prefix *= float64(i)\n        for prefix >= float64(maxPrefix)  {\n\t\t\tprefix /= 10\n\t\t}\n        \n\t\tfor product%10 == 0 {\n\t\t\tproduct /= 10\n\t\t\ttrailingZeros++\n\t\t}\n\n\t\tproduct %= maxSuffix\n\t}\n    totalDigitsInProduct+=1\n    totalDigitsInProduct=math.Floor(totalDigitsInProduct)\n    workingDigits:= int(totalDigitsInProduct) - trailingZeros\n    \n\tsuffix := fmt.Sprintf("%v",product)\n    if workingDigits > 10 {\n        return fmt.Sprintf("%v...%se%v",int(prefix),suffix[len(suffix)-5:],trailingZeros)\n\t}\n\tif workingDigits >= 5 {\n        return fmt.Sprintf("%v%se%v",int(prefix),suffix[len(suffix)-(workingDigits-5):],trailingZeros)\n\t}\n    return fmt.Sprintf("%ve%v",int(prefix),trailingZeros)\n}
['Math', 'Go']