洛谷-P1010-幂次方-普及(摁写+递归/二进制+递归)

2023-11-18

一 题目描述

二 示例及提示

输入格式

一行一个正整数 n。

输出格式

符合约定的 n的 0,2 表示(在表示中不能有空格)。

输入输出样例

输入 #1

1315

输出 #1

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

三 题解

1.直接按题意递归处理

思路:

代码:

#include <iostream>
#include <cmath>
using namespace std;

const int a = 2;

void confirm(int x)
{
    // 先无脑输出一个2,因为输入范围不存在小于1的数
    if(x != 0)
        cout<< "2";
    else    return;
    // 先找最接近x的k次幂
    int k = log(x)/log(a);
    //处理k部分 讨论k=1 =2 =0 和其他情况
    if(k == 2){
        cout << "(2)";
    }else if(k == 0){
        cout << "(0)";
    }else if(k > 2){
        // 若次幂大于2,则也要递归处理
        cout << "(";
        confirm(k);
        cout << ")";
        // 注意括号的先后输出
    }
    // 余数remainder
    int remainder = x - pow(a,k);
    // 处理余数部分
    if(remainder){
        cout << "+";
        confirm(remainder);
    }
}

int main()
{
    int x;
    cin >> x;
    confirm(x);
    return 0;
}

另:

exp(n) 为e^n;

log() 以e为底

log10() 以10为底

2.二进制+递归

以下题解基本来自洛谷原题里的题解区Delva大佬的解答。

#include <iostream>
using namespace std;

string confirm(int x)
{
    if(x == 0)
        return "0";
    int i = 0;
    string s = "";
    do{
        if(x & 1){
            s = (i == 1? "2":"2("+confirm(i)+")") + (s == ""? "":"+") + s;
        }
    }while(i++,x>>=1);
    return s;
}

int main()
{
    int x;
    cin >> x;
    cout << confirm(x) ;
    return 0;
}

写了一点我理解的思路就是:首先要明白二进制就是表示一个正整数分解为2的幂次方和,然后对于用户输入的数字x,我们可以让x每次右移1,同时设立一个计数器i来计算其右移的次数,而while的终止条件就是从低位到高位直到遍历完x的最高位,我们每次用字符串来保存遍历的结果,同时后一次遍历得到的字符串要拼接上前一次的字符串,并且要注意后一次的必须写在前面,因为它的次方更大。而且如果是遍历的第一遍,当字符串为空的时候,当然我们就不需要填写加号了,因此可以用三元运算符判断s是否为空串,如果是的话就不加加号,不是则需要加上。接下来是重点——对字符串拼接的设计,具体如图。

二进制位上的数不是1就是0,为0时不用做任何处理,因此我们只用考虑位上数字为1的情形。而且如图会发现,只有当i=1时,2后面是不用跟括号的,把这个情况做特殊处理,用一个三目运算符,讨论这两种情况,而括号里的数字我们则再进行递归处理,当i==0时,我们在函数开始部分用判断语句返回一个"0"。

注:>>= 相当于右移后赋值,例如x>>=3,就是将x右移3位后得到的结果再赋值给原来的变量x。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

洛谷-P1010-幂次方-普及(摁写+递归/二进制+递归) 的相关文章

随机推荐

  • HBase Hlog原理总结归纳

    HBase Hlog原理总结归纳 1 Hlog概述 按照此前另外一篇博客所述 Hlog其实就是为了保存内存缓存数据现场而建立的一套机制Hbase内部机制 Hlog也叫做WAL文件 全名是write ahead log 故名思意 就是在数据写
  • 接单日记(三)文本处理之词云生成

    文章目录 接单日记 三 文本处理之词云生成 一 实验目的 二 实验内容 三 程序及结果 1 运行程序 2 运行结果 接单日记 三 文本处理之词云生成 此为一个实验报告 故遵守实验报告的格式 一 实验目的 熟悉Python第三方库python
  • FPGA学习笔记_ROM核调用与调试

    FPGA学习笔记 ROM核调用与调试 1 ROM存储器IP核的使用 2 创建 mif文件 3 In system memory content editor内存查看工具的使用 4 Signal tapII工具使用 5 Verilog 代码
  • 字节码增强和AOP

    字节码增强技术 AOP技术其实就是字节码增强技术 JVM提供的动态代理追根究底也是字节码增强技术 应用场景 某一天系统出现OOM 通过工具分析 是莫各类的对象占用了很大空间 但是这个对象被许多程序访问 那么就很难找到 工程的全文匹配也只能找
  • ISAKMP - 解释域(DOI)和初始向量(IV)

    Domain of Interpretation 解释域 DOI定义了负载的格式 交换的类型 以及对安全相关信息的命名约定 比如对安全策略或者加密算法和模式的命名 DOI标识用来说明payload通过哪一个DOI来解释 常用的DOI有两个
  • Git分支常用命令

    列出所有本地分支 git branch 列出所有远程分支 git branch r 新建一个分支 但依然停留在当前分支 git branch branch name 新建一个分支 并切换到该分支 git checkout b branch
  • 什么是多进程-多线程-多协程 ---- 文件系统

    Linux操作系统五大子系统 内核 操作系统的核心代码 进程调度 SCHED 调度算法 先进先出 短作业优先 最高优先级 内存管理 MM 虚拟内存 虚拟地址映射 段页机制 缺页中断 内存的分配管理 伙伴系统 操作系统之内存管理 知乎 文件系
  • 【漏扫工具xray】简介、下载、使用步骤、命令指南、导入安全证书

    目录 一 简介 二 下载 三 使用方法 3 1 使用步骤 3 1 1 第一步 文件夹中打开Windows powershell 或者cmd进入 3 1 2 第二步 在终端使用XRAY exe程序 3 2 命令指南 3 2 1 单一扫描 3
  • 联想3850x6服务器装esxi系统,VMware Cloud Foundation 3.x 演示 — 系统部署

    VMware Cloud Foundation 简介 VMware Cloud Foundation VCF 是 VMware 针对用户数据中心现代化改造而专门开发的新一代云平台 它整合了 vSphere vSAN NSX Data Cen
  • 学习笔记-前端开发架构设计

    前端开发的技术选项主要包含以下几点 下面对一些名词概念的解释做了笔记 1 分层架构 把功能相似 抽象级别相近的实现进行分层隔离 优势 松散耦合 易维护 易复用 易扩展 常见分层方式 MVC MVVM 2 模块化 解决一个复杂问题时 自顶向下
  • LSTM结构简要图示

    更多参考 https zhuanlan zhihu com p 86876988 https www sohu com picture 443110431
  • MCP3421的基础知识点

    目录 1 MCP3421封装形式与结构 2 MCP3421的工作原理 3 MCP3421的应用 Microchip公司的MCP3421与其他A D转换器相比 特点主要表现在 全差分输入 18位分辨率 精密的连续自校准功能 可选择3 75 1
  • 调试osgEarth(十五)分页瓦片加载器在更新遍历时对请求处理过程(3)

    现在该正式进入merge的阶段了 我感觉 还是基础不牢 现在调试起来有点懵懂 不管这么着 继续调试下去 一定要有个pass 没有则添加 看来每个texture只有一个image 以上是颜色的融合 接下来是高程的融合 没有高程 所以没进入这两
  • R语言深度学习中的在线评论分类:主题模型的应用

    目录 引言 一 主题模型简介 二 在线评论分类的流程 三 使用R语言实现主题模型
  • 使用Seay进行代码安全审计

    Seay介绍 Seay介绍 Seay其实是一款用 C语言所开发的一款对 PHP相关代码的安全审计系统 它是运 行在 Windows操作系统上的 这种软件能够发现 SQL 注入漏洞 代码执行漏洞 命令执行错误 文件内容包括 文件的上传 绕过防
  • Python 窗体(tkinter)下拉列表框(Combobox)

    import tkinter from tkinter import ttk def go args 处理事件 args表示可变参数 print comboxlist get 打印选中的值 win tkinter Tk 构造窗体 comva
  • 答题微信小程序实现(7):python3将题库处理成json格式的。

    通常来说 我们写答题程序的时候 拿到手的题库不会是json格式的 而是word或txt pdf就像考试卷子那样的 这里写一下用python3将普通题库处理成json格式 选择python3的原因是 相对于2 7版本 它对中文更友好 原始题库
  • 为什么uzi排到古手羽就秒_uzi为何见到古手羽就秒退?并非因为55开,而是小狗有1个直播习惯...

    UZI是LPL的顶尖ADC之一 这么多年为LPL赢得了不少荣誉 在职业赛场上表现出色的UZI 开了直播同样是效果爆炸 吸引了不少粉丝的观看 经常看UZI直播的粉丝可能有时候会发现一个奇怪的现象 那就是UZI在排到古手羽的时候会直接秒掉 每次
  • 红帽子redhat linux 9.0官方下载地址,附MD5校验码

    红帽子redhat linux 9 0官方下载地址如下 https archive download redhat com pub redhat linux 9 en iso i386 shrike i386 disc1 iso https
  • 洛谷-P1010-幂次方-普及(摁写+递归/二进制+递归)

    一 题目描述 二 示例及提示 输入格式 一行一个正整数 n 输出格式 符合约定的 n的 0 2 表示 在表示中不能有空格 输入输出样例 输入 1 1315 输出 1 2 2 2 2 0 2 2 2 2 2 0 2 2 2 2 0 2 2 0