Just a runnable solution
Code\n\nimpl Solution {\n    pub fn abbreviate_product(left: i32, right: i32) -> String {\n        let (mut suff, mut c, mut total, max_suff) = (1, 0, 0, 100_00
# Code\n```\nimpl Solution {\n    pub fn abbreviate_product(left: i32, right: i32) -> String {\n        let (mut suff, mut c, mut total, max_suff) = (1, 0, 0, 100_000_000_000);\n        let mut pref = 1.0;\n        for i in left..=right {\n            pref *= i as f64;\n            suff *= i as i64;\n            while pref >= 100_000.0 {\n                pref /= 10.0;\n                total = if total == 0 { 6 } else { total + 1 };\n            }\n            while suff % 10 == 0 {\n                suff /= 10;\n                c += 1;\n            }\n            suff %= max_suff;\n        }\n        let s = suff.to_string();\n        format!(\n            "{}{}{}e{}",\n            pref as i32,\n            if total - c <= 10 { "" } else { "..." },\n            if total - c < 5 {\n                ""\n            } else {\n                &s[s.len() - (total - c - 5).min(5) as usize..]\n            },\n            c\n        )\n    }\n}\n```
['Rust']