func_code_string: #include <bits/stdc++.h>   using namespace std;   unordered_map<long long, string> Map;   unordered_map<long long, string>::iterator it;   string Get(long long x) {     string ans =   ;     int s[13], cnt = 0;     while (x) {       s[++cnt] = x % 10;       x /= 10;     }     for (int i = cnt; i >= 1; i--) ans += char(s[i] +  0 );     return ans;   }   int main() {     long long n;     scanf( %lld , &n);     long long len = sqrt(n);     for (long long i = 2; i <= len; i++) {       for (long long j = i * i, k = 2; j <= n; j *= i, k++) {         string gg = Get(i) +  ^  + Get(k);         if (gg.size() >= Get(j).size()) continue;         if (Map[j].size() == 0) {           Map[j] = gg;         } else if (Map[j].size() > gg.size())           Map[j] = gg;       }     }     string ans = Get(n);     for (it = Map.begin(); it != Map.end(); it++) {       long long k = (*it).first;       string gg = (*it).second;       if (n / k >= 2) {         gg +=  * ;         gg += (Map.count(n / k)) ? Map[n / k] : Get(n / k);       }       if (n % k) {         gg +=  + ;         gg += (Map.count(n % k)) ? Map[n % k] : Get(n % k);       }       if (ans.size() > gg.size()) ans = gg;     }     cout << ans << endl;     return 0;   }   