[Kotlin] 200 ms. One pass
\nclass Solution {\n    fun abbreviateProduct(left: Int, right: Int): String {\n        val eps = 1_000_000_000_000L\n\n        var pre = 1L\n        var suf = 
```\nclass Solution {\n    fun abbreviateProduct(left: Int, right: Int): String {\n        val eps = 1_000_000_000_000L\n\n        var pre = 1L\n        var suf = 1L\n\n        var zeroCount = 0\n\n        (left.toLong()..right.toLong()).forEach {\n            pre *= it\n            suf *= it\n\n            while (pre > eps) pre /= 10\n\n            while (suf % 10L == 0L) {\n                suf /= 10L\n                zeroCount++\n            }\n\n            if (suf > eps) suf %= eps\n        }\n\n        return if (suf.toString().run { length <= 10 && pre.toString().indexOf(this) >= 0 }) {\n            "${suf}e$zeroCount"\n        } else {\n            pre.toString().padStart(5, \'0\').substring(0, 5) +\n                    "..." +\n                    suf.toString().padStart(5, \'0\').let {\n                        it.substring(it.length - 5, it.length)\n                    } +\n                    "e$zeroCount"\n        }\n    }\n}\n```
['Kotlin']