[字符串操作] 分割乘积

分割乘积

题目描述

给定一个整数,求插入两个乘号将该整数分割成三个数之后,三个数的的最大乘积。

关于输入

只有一行,一个整数。

关于输出

所求出的最大乘积。

例子输入

	4242

例子输出

	336

提示信息

整数有正有负,注意,不是求“绝对值”最大的乘积。
输入保证,如果按题目要求的乘法操作,不会使int发生溢出。

解题分析

目标是找到一个整数分割成三个部分后,这三个部分乘积的最大值。程序首先读取一个整数,但为了方便处理,它将这个整数作为字符串读入。这样可以轻松地在不同位置“切割”这个数字。

程序使用两个嵌套的循环来尝试所有可能的切割位置。第一个循环确定第一个乘号的位置,第二个循环确定第二个乘号的位置。每次循环都会根据这两个乘号的位置将数字分割成三部分。

分割后,程序将这三部分从字符串转换为长整型数字,然后计算这三个数字的乘积。程序会持续追踪遇到的最大乘积。在尝试了所有可能的分割方式后,程序输出找到的最大乘积值。

整个思路的核心是穷举法,即尝试所有可能的分割方式,然后找出其中乘积最大的一种。这种方法简单直接,适用于这个问题,因为整数的长度有限,所以可能的分割方式也是有限的。

代码实现

(方法一)c语言风格

#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <stdlib.h>

int main() {
    char temp[12],numStr[12]; // 假设输入的整数不超过10位
    int flag=0;
    scanf("%s", temp);
    if(temp[0]=='-'){
        flag=1;
        strcpy(numStr,temp+1);
    }
    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; cin>>num;
    int flag=0;
    if(num[0]=='-'){
        num=num.substr(1);
        flag=1;
    }
    int len=num.size(); long long int max=-INT64_MAX;
    for(int i=1;i<=len-2;i++){
        string temp1=num.substr(0,i);
        long long int n1=stoll(temp1);
        for(int j=1;j<len-i;j++){
            string temp2=num.substr(i,j);
            long long int n2=stoll(temp2);
                string temp3=num.substr(i+j);
                long long int n3=stoll(temp3);
                if(!flag)
                max=max>n1*n2*n3?max:n1*n2*n3;
                else{
                    //cout<<n1<<" "<<n2<<" "<<n3<<endl;
                    max=max>(-1)*n1*n2*n3?max:(-1)*n1*n2*n3;
                }
        }
    }
    cout<<max<<endl;
	return 0;
}

进一步拓展

strncpystrcpy 都是 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 结尾的。
  • 使用这些函数时需要特别注意目标字符串的大小,以避免溢出或未初始化的内存访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/214120.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

正是阶段高等数学复习--函数极限的计算

之前在预备阶段中函数极限的解决方式分三步&#xff0c;第一步观察形式并确定用什么方式来解决&#xff0c;第二步化简&#xff0c;化简方式一共有7种&#xff0c;分别是最重要的三种&#xff08;等价替换、拆分极限存在的项、计算非零因子&#xff09;以及次重要的4种&#xf…

DAPP开发【06】nodejs安装与npm路径更换

windows系统在执行用户命令时顺序 windows系统在执行用户命令时&#xff0c;若用户未给出文件的绝对路径&#xff0c; 则 &#xff08;1&#xff09;首先在当前目录下寻找相应的可执行文件、批处理文件等&#xff1b; &#xff08;2&#xff09;若找不到&#xff0c;再依次在系…

数据结构和算法-哈夫曼树以相关代码实现

文章目录 总览带权路径长度哈夫曼树的定义哈夫曼树的构造法1法2 哈夫曼编码英文字母频次总结实验内容&#xff1a; 哈夫曼树一、上机实验的问题和要求&#xff08;需求分析&#xff09;&#xff1a;二、程序设计的基本思想&#xff0c;原理和算法描述&#xff1a;三、调试和运行…

2024美赛数学建模资料---100%获奖资料

很好的教程了 一共二十四章 每一章都是一个模型 并且有matlab编程编码 第一章 线性规划 第二章 整数规划 第三章 非线性规划 第四章 动态规划 第五章 图与网络 第六章 排队论 第七章 对策论 第八章 层次分析法 第九章 插值与拟合 第十章 数据的统计描述和分析 第十一章…

【方案】智慧林业:如何基于EasyCVR视频能力搭建智能林业监控系统

随着人类进程的发展。城市化范围的扩大&#xff0c;森林覆盖率越来越低&#xff0c;为保障地球环境&#xff0c;保护人类生存的净土&#xff0c;森林的保护与监管迫在眉睫。TSINGSEE青犀智慧林业智能视频监控系统方案的设计&#xff0c;旨在利用现代科技手段提高林业管理的效率…

《洛谷深入浅出进阶篇》模意义下的乘法逆元+洛谷P3811

什么是乘法逆元&#xff1f; 算数意义上的乘法逆元指的是倒数&#xff0c;即&#xff1a;a*&#xff08;1/a&#xff09;1 所以 1/a 是 a在算数意义下的乘法逆元&#xff0c;或者可以说二者互为逆元。 这有什么用呢&#xff1f; 除以a就等于乘上a的乘法逆元&#xff0c;乘以…

JS不同运算符下的隐式类型转换

目录 运算符 逻辑运算符&#xff08;&&、||、!&#xff09;和 条件表达式&#xff08;if、三元表达式&#xff09; 逻辑运算符 条件表达式 算数运算符&#xff08;*、/、- %、&#xff09;和 关系运算符&#xff08;>、<、、!&#xff09; 算数运算符 关系…

solidity实现ERC721代币标准发布NFT

文章目录 1、非同质化货币&#xff08;NFT&#xff09;- 维基百科2、IERC1653、IERC7214、IERC721Receiver5、IERC721Metadata6、ERC7217、ERC721 NFT 的实现8、编译部署 1、非同质化货币&#xff08;NFT&#xff09;- 维基百科 非同质化代币&#xff08;英语&#xff1a;Non-F…

时间复杂度为O (nlogn)的排序算法

归并排序 归并排序遵循分治的思想&#xff1a;将原问题分解为几个规模较小但类似于原问题的子问题&#xff0c;递归地求解这些子问题&#xff0c;然后合并这些子问题的解来建立原问题的解&#xff0c;归并排序的步骤如下&#xff1a; 划分&#xff1a;分解待排序的 n 个元素的…

MySQL进阶部分

存储引擎 MySQL体系结构图&#xff1a; 连接层&#xff1a; 最上层是一些客户端连接服务&#xff0c;主要完成一些类似于连接处理 &#xff0c;授权认证及相关的安全方案。服务器也会为安全接入的每个用户端验证它所具有的操作权限。 服务层&#xff1a; 第二层架构主要完成大…

Visual Studio 2022+Python3.11实现C++调用python接口

大家好&#xff01;我是编码小哥&#xff0c;欢迎关注&#xff0c;持续分享更多实用的编程经验和开发技巧&#xff0c;共同进步。 查了一些资料&#xff0c;不是报这个错&#xff0c;就是报哪个错&#xff0c;没有找到和我安装的环境的一致的案例&#xff0c;于是将自己的摸索分…

贪心 55. 跳跃游戏 45.跳跃游戏 II

55. 跳跃游戏 题目&#xff1a; 给定非负数组&#xff0c;初始位置在数组第一格&#xff0c;数组值是可以选择的最大跳跃步数&#xff0c;判断能不能达到数组末尾。 示例 1: * 输入: [2,3,1,1,4] * 输出: true * 解释: 我们可以先跳 1 步&#xff0c;从位置 0 到达 位置 1,…

在Windows 11中,把iPhone照片和视频导出来又快又简单,无需第三方软件

如果你想将照片和视频从iPhone传输到Windows 11 PC&#xff0c;最快、最简单的方法是插入手机并执行自动导入。以下是操作方法。 如何将照片和视频从iPhone导入Windows 如果你用USB数据线将iPhone插入Windows PC&#xff0c;Windows 11可以像标准数码相机一样连接到它&#x…

JavaWeb 带条件的分页查询

最终效果图 注意&#xff1a;没有带条件的时候 默认的是第一页数据 条件是组合的 sql->sql的动态变换 注意第二次查询的时候回显问题 就是填完条件后显示完当页数据ok 但是我点击第二页的时候条件还存在着 此时ListSerevlet不仅要拿到页码 页容量 还要拿到三个条件参数 封装…

IDEA中的Postman!

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

Excel 删除空白行

目录 一. 方式一: 筛选删除二. 方式二: 定位条件三. 方式三: 隐藏非空白行&#xff0c;删除空白行 一. 方式一: 筛选删除 选中空白行对应的列&#xff0c;按下Ctrl Shift L&#xff0c;给列添加过滤条件。过滤出空白行&#xff0c;然后删除即可。 二. 方式二: 定位条件 按下…

Excel 分列功能

一. 需求 ⏹有一段文本&#xff0c;文本一共有7列。这7列文本之间的分隔符不相同 有一个空格的有多个空格的有Tab的jmw_state 和 method 之间用 & 连接 现在要求&#xff0c;将这段文本粘贴到Excel中&#xff0c;进行分列。并且需要将 jmw_state 和 method 也进行分列 也…

使用求2个字符串最短编辑距离动态规划算法实现 git diff 算法 java 实现

测试类 MyDiffTest.java&#xff1a; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List;public class MyDiffTest {private static String path "\\xxx\\";private static List<String> lines…

HBase整合Phoenix

文章目录 一、简介1、Phoenix定义2、Phoenix架构 二、安装Phoenix1、安装 三、Phoenix操作1、Phoenix 数据映射2、Phoenix Shell操作3、Phoenix JDBC操作3.1 胖客户端3.2 瘦客户端 四、Phoenix二级索引1、为什么需要二级索引2、全局索引&#xff08;global index&#xff09;3、…

基于SSM的网上手机销售系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…
最新文章