| 描述 | |
| 给定一个整数,求插入两个乘号的最大乘积。 | |
| 关于输入 | |
| 只有一行,一个整数。 | |
| 关于输出 | |
| 所求出的最大乘积。 | |
| 例子输入 | |
4242 | |
| 例子输出 | |
336 | |
| 提示 | |
| 整数有正有负。 输入保证:如果按题目要求的乘法操作,不会使int发生溢出。 |
注意要函数中要对正负进行讨论!!
#include#include ; #include using namespace std; int n; int ORI[100] = {}; int XX(int a)//求一个数分割成两个数的最大乘积 { if (a == 0) { return 0; }//0,返回0 bool flag = 0; int ori[100] = {}; int num = 0; int t_one = 0; int t_two = 0; if (a > 0) { flag = 1; } while (a != 0) {//存储数a的每一位 ori[num++] = a % 10 ; a /= 10; } if (flag) {//如果a是正数 int MAX = -9999999999; for (int i = 0; i < num - 1; ++i) { t_one = ori[num - 1 - i] + t_one * 10; for (int j = i + 1; j < num; ++j) { t_two = ori[num - 1 - j] + t_two * 10; } MAX = max(MAX, t_one * t_two); t_two = 0; } return MAX; } else {//如果a是负数 int MIN = 9999999999; for (int i = 0; i < num - 1; ++i) { t_one = ori[num - 1 - i] + t_one * 10; for (int j = i + 1; j < num; ++j) { t_two = ori[num - 1 - j] + t_two * 10; } MIN = min(MIN, t_one * t_two); t_two = 0; } return MIN; } } int main() { int ans = -999999999; cin >> n; int len = 0, temp = 0, t = 0; while (n != 0) { ORI[len++] = n % 10; n /= 10; } for (int i = 0; i < len - 2; ++i) { temp= ORI[len - 1 - i] + temp * 10; for (int j = i + 1; j < len; ++j) { t = ORI[len - 1 - j] + t * 10; } ans = max(ans, temp * XX(t)); t = 0; } cout << ans; return 0; }



