做网站必须要数据库么,品牌网站建设 1蝌蚪小,专业网页制作的帮手,邮箱qq登录网页登陆入口
分割乘积
题目描述
给定一个整数#xff0c;求插入两个乘号将该整数分割成三个数之后#xff0c;三个数的的最大乘积。
关于输入
只有一行#xff0c;一个整数。
关于输出
所求出的最大乘积。
例子输入 4242例子输出 336提示信息
整数有正有负#xff0c;注意求插入两个乘号将该整数分割成三个数之后三个数的的最大乘积。
关于输入
只有一行一个整数。
关于输出
所求出的最大乘积。
例子输入 4242例子输出 336提示信息
整数有正有负注意不是求“绝对值”最大的乘积。 输入保证如果按题目要求的乘法操作不会使int发生溢出。
解题分析
目标是找到一个整数分割成三个部分后这三个部分乘积的最大值。程序首先读取一个整数但为了方便处理它将这个整数作为字符串读入。这样可以轻松地在不同位置“切割”这个数字。
程序使用两个嵌套的循环来尝试所有可能的切割位置。第一个循环确定第一个乘号的位置第二个循环确定第二个乘号的位置。每次循环都会根据这两个乘号的位置将数字分割成三部分。
分割后程序将这三部分从字符串转换为长整型数字然后计算这三个数字的乘积。程序会持续追踪遇到的最大乘积。在尝试了所有可能的分割方式后程序输出找到的最大乘积值。
整个思路的核心是穷举法即尝试所有可能的分割方式然后找出其中乘积最大的一种。这种方法简单直接适用于这个问题因为整数的长度有限所以可能的分割方式也是有限的。
代码实现
方法一c语言风格
#include stdio.h
#include string.h
#include limits.h
#include stdlib.hint main() {char temp[12],numStr[12]; // 假设输入的整数不超过10位int flag0;scanf(%s, temp);if(temp[0]-){flag1;strcpy(numStr,temp1);}else{strcpy(numStr,temp);}int len strlen(numStr);long maxProduct LONG_MIN;for (int i 1; i len; i) {for (int j i 1; j len; j) {// 将字符串划分为三部分char part1[11], part2[11], part3[11];strncpy(part1, numStr, i);part1[i] \0;strncpy(part2, numStr i, j - i);part2[j - i] \0;strcpy(part3, numStr j);// 将字符串转换为整数并计算乘积long num1 atol(part1);long num2 atol(part2);long num3 atol(part3);long product;if(!flag)product num1 * num2 * num3;else product -1*num1 * num2 * num3;// 更新最大乘积if (product maxProduct) {maxProduct product;}}}printf(%ld\n, maxProduct);return 0;
}
方法二c风格
#include iostream
#include string
#include climits
using namespace std;// C初始模板程序int main() {string num; cinnum;int flag0;if(num[0]-){numnum.substr(1);flag1;}int lennum.size(); long long int max-INT64_MAX;for(int i1;ilen-2;i){string temp1num.substr(0,i);long long int n1stoll(temp1);for(int j1;jlen-i;j){string temp2num.substr(i,j);long long int n2stoll(temp2);string temp3num.substr(ij);long long int n3stoll(temp3);if(!flag)maxmaxn1*n2*n3?max:n1*n2*n3;else{//coutn1 n2 n3endl;maxmax(-1)*n1*n2*n3?max:(-1)*n1*n2*n3;}}}coutmaxendl;return 0;
}
进一步拓展
strncpy 和 strcpy 都是 C 语言标准库中的字符串处理函数它们用于复制字符串但在使用方式上有所不同。
strcpy
strcpy 函数用于将一个字符串复制到另一个字符串。它的原型如下
char *strcpy(char *dest, const char *src);dest目标字符串的指针用于存放复制的内容。src源字符串的指针。
strcpy 会将 src 指向的字符串包括结束符 \0复制到 dest 指向的位置。复制过程会覆盖 dest 原有的内容并且在 src 字符串的结尾添加 \0 以确保 dest 是一个完整的字符串。
strncpy
strncpy 函数类似于 strcpy但它允许指定最大复制长度。其原型如下
char *strncpy(char *dest, const char *src, size_t n);dest目标字符串的指针。src源字符串的指针。n最多复制的字符数。
strncpy 会从 src 指向的字符串复制最多 n 个字符到 dest。如果 src 的长度小于 n则 strncpy 会在 dest 之后添加额外的 \0 字符直到总共复制了 n 个字符。如果 src 的长度大于或等于 n则不会在 dest 的末尾添加 \0 字符。
使用注意事项
当使用 strcpy 时必须确保 dest 有足够的空间来存储 src 的内容包括结尾的 \0 字符。否则可能会发生缓冲区溢出导致不可预测的行为。在使用 strncpy 时如果 n 小于 src 的长度dest 将不会以 \0 结尾。这可能导致后续操作出现问题因为大多数字符串处理函数都假设字符串是以 \0 结尾的。使用这些函数时需要特别注意目标字符串的大小以避免溢出或未初始化的内存访问。