C/C++每日一练(20230224)

news2025/7/27 22:17:38

目录

1. 字符串排序

2. Excel表列名称

3. 颠倒二进制位

附录:

位移运算符

左移运算符<<

1.无符号

2.有符号

右移运算符>>

1.无符号

2.有符号

程序测试


1. 字符串排序

编写程序,输入若干个字符串。

要求:
(1)按字符串长度的大小升序输出各个字符串。
(2)按字符串中字符的ASCII码值大小升序输出各个字符串。

代码:

#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

bool compare(string a,string b) {
    if (a.length() != b.length()) {
       return a.length() < b.length();
    }
    return a < b;
}

int main()
{
    vector<string>list;
    string inputString;
    while (cin>>inputString) {
        if (inputString == "0") {
            break;
        }
        list.push_back(inputString);
    }
    sort(list.begin(),list.end(),compare);
    for (int i=0; i<list.size(); i++) {
        cout<<list[i]<<endl;
    }
    return 0;
}

输入输出: (略)

2. Excel表列名称

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...

示例 1:

输入:columnNumber = 1
输出:"A"

示例 2:

输入:columnNumber = 28
输出:"AB"

示例 3:

输入:columnNumber = 701
输出:"ZY"

示例 4:

输入:columnNumber = 2147483647
输出:"FXSHRXW"

提示:

  • 1 <= columnNumber <= 231 - 1

代码:

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    string convertToTitle(int n)
    {
        string res;
        while (n)
        {
            int temp = n % 26;
            n /= 26;
            if (temp)
                res.push_back('A' + temp - 1);
            else
            {
                res.push_back('Z');
                n--;
            }
        }
        reverse(res.begin(), res.end());
        return res;
    }
};

int main()
{
	Solution s;
	cout << s.convertToTitle(1) << endl;
	cout << s.convertToTitle(28) << endl;
	cout << s.convertToTitle(701) << endl;
	cout << s.convertToTitle(2147483647) << endl;
	
	return 0;
}

输出:

A
AB
ZY
FXSHRXW

3. 颠倒二进制位

颠倒给定的 32 位无符号整数的二进制位。

提示:(仅对Java而言,C++用不到批提示)

  • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
  • 在 Java 中,编译器使用二进制补码(https://baike.baidu.com/item/二进制补码/5295284)记法来表示有符号整数。因此,在 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825

示例 1:

输入:n = 00000010100101000001111010011100
输出:964176192 (00111001011110000010100101000000)
解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596 因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000

示例 2:

输入:n = 11111111111111111111111111111101
输出:3221225471 (10111111111111111111111111111111)
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
  因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。

提示:

  • 输入是一个长度为 32 的二进制字符串

进阶: 如果多次调用这个函数,你将如何优化你的算法?

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    uint32_t reverseBits(uint32_t n)
    {
        uint32_t res = 0;
        for (int i = 0; i < 32; i++)
        {
            res <<= 1;
            res |= n & 1;
            n >>= 1;
        }
        return res;
    }
};

int main()
{
	Solution s;
	cout << s.reverseBits(43261596) << endl;
	cout << s.reverseBits(4294967293) << endl;
	
	return 0;
}

输出:

964176192
3221225471


附录:

位移运算符

是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。

左移运算符<<

1.无符号

语法格式:需要移位的数字<<移位的次数n
运算规则:按二进制形式把所有数字向左移动相应的位数,高位移出(舍弃),低位的空位补0。相当于乘以2的n次方
例如:4<<2 ,就是将数字4左移2位
过程:4的二进制形式:00000000 00000000 00000000 00000100;然后把高位2个0移出,其余所有位向左移动2位,低位补0,得到:00000000 00000000 00000000 00010000;十进制数为16,16=4*22。

2.有符号

如果你左移有符号的数字,以至于符号位受影响,则结果是不确定的。

右移运算符>>

1.无符号

语法格式:需要移位的数字>>移位的次数n
运算规则:按二进制形式把所有数字向右移动相应的位数,低位移出(舍弃),高位的空位补0。相当于除以2的n次方
例如:4>>2 ,就是将数字4左移2位
过程:4的二进制形式:00000000 00000000 00000000 00000100;然后把低位2个0移出,其余所有位向右移动2位,高位补0,得到:00000000 00000000 00000000 00000001;十进制数为1,1=4÷22。

2.有符号

语法格式:需要移位的数字>>移位的次数n
运算规则:按二进制形式把所有数字向右移动相应的位数,低位移出(舍弃),正数,高位的空位补0。负数,高位的空位补1.

程序测试

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

int main() {
    unsigned short short1 = 4;    
    bitset<16> bitset1{short1};   // the bitset representation of 4
    cout << bitset1 << endl;  // 0000000000000100

    unsigned short short2 = short1 << 1;     // 4 left-shifted by 1 = 8
    bitset<16> bitset2{short2};
    cout << bitset2 << endl;  // 0000000000001000

    unsigned short short3 = short1 << 2;     // 4 left-shifted by 2 = 16
    bitset<16> bitset3{short3};
    cout << bitset3 << endl;  // 0000000000010000

	return 0;
}
#include <iostream>
#include <bitset>
using namespace std;

int main() {
    short short1 = 16384;    
    bitset<16> bitset1{short1};
    cout << bitset1 << endl;  // 0100000000000000 

    short short2 = short1 << 1;
    bitset<16> bitset2{short2};  // 16384 left-shifted by 1 = -32768
    cout << bitset2 << endl;  // 100000000000000

    short short3 = short1 << 14;
    bitset<16> bitset3{short3};  // 4 left-shifted by 14 = 0
    cout << bitset3 << endl;  // 000000000000000  
}
#include <iostream>
#include <bitset>
using namespace std;

int main() {
    unsigned short short11 = 1024;
    bitset<16> bitset11{short11};
    cout << bitset11 << endl;     // 0000010000000000

    unsigned short short12 = short11 >> 1;  // 512
    bitset<16> bitset12{short12};
    cout << bitset12 << endl;     // 0000001000000000

    unsigned short short13 = short11 >> 10;  // 1
    bitset<16> bitset13{short13};
    cout << bitset13 << endl;     // 0000000000000001

    unsigned short short14 = short11 >> 11;  // 0
    bitset<16> bitset14{short14};
    cout << bitset14 << endl;     // 0000000000000000}
}
#include <iostream>
#include <bitset>
using namespace std;

int main() {
    short short1 = 1024;
    bitset<16> bitset1{short1};
    cout << bitset1 << endl;     // 0000010000000000

    short short2 = short1 >> 1;    // 512
    bitset<16> bitset2{short2};
    cout << bitset2 << endl;     // 0000001000000000

    short short3 = short1 >> 10;    // 1
    bitset<16> bitset3{short3};       
    cout << bitset3 << endl;     // 0000000000000001

    short neg1 = -16;
    bitset<16> bn1{neg1};
    cout << bn1 << endl;    // 1111111111110000

    short neg2 = neg1 >> 1; // -8
    bitset<16> bn2{neg2};
    cout << bn2 << endl;    // 1111111111111000

    short neg3 = neg1 >> 2; // -4
    bitset<16> bn3{neg3};
    cout << bn3 << endl;    // 1111111111111100

    short neg4 = neg1 >> 4; // -1
    bitset<16> bn4{neg4};        
    cout << bn4 << endl;    // 1111111111111111

    short neg5 = neg1 >> 8; // -1???
    bitset<16> bn5{neg5};        
    cout << bn5 << endl;    // 1111111111111111

    return 0;

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++学习笔记-类和对象

##类与对象的思想 面向对象的特点&#xff1a;封装、继承、多态 面向对象编程的特点&#xff1a; &#xff08;1&#xff09;易维护&#xff1a;可读性高&#xff0c;即使改变了需求&#xff0c;由于继承的存在&#xff0c;只需要对局部模块进行修改&#xff0c;维护起来非常方…

华为OD机试题,用 Java 解【高矮个子排队】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

如何通过jar包得知maven坐标,以及如何替换依赖的依赖的版本

问题一&#xff1a;我只能得到这个jar包的名字&#xff0c;如果得知这个jar包的maven坐标&#xff08;groupId以及artifactId&#xff09;&#xff1f; 思路1&#xff1a;将jar包的名字&#xff08;去除版本号&#xff09;在mvn仓库中搜索&#xff0c;地址&#xff1a;https:/…

从ChatGPT出发:大模型与自然语言模型

目录引言基石故事的开始&#xff1a;Transformer异姓兄弟&#xff1a;GPT、Bert与GPT-2GPTBertGPT-2大力出奇迹&#xff1a;GPT3模型的进化&#xff1a;InstructGPTChatGPT代码库TransformerGPT-2GPT-3InstructGPT未来的工作安全性&有效性算力与标注代价的平衡参考文献引言…

LeetCode——2357. 使数组中所有元素都等于零

一、题目 给你一个非负整数数组 nums 。在一步操作中&#xff0c;你必须&#xff1a; 选出一个正整数 x &#xff0c;x 需要小于或等于 nums 中 最小 的 非零 元素。 nums 中的每个正整数都减去 x。 返回使 nums 中所有元素都等于 0 需要的 最少 操作数。 来源&#xff1a;力…

2023年2月《中国数据库行业分析报告》正式发布(含精彩内容概览)

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况&#xff0c;从2022年4月起&#xff0c;墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》&#xff0c;持续传播数据技术知识、努力促进技术创新与行业生…

TongWeb8中应用常见异常

问题一&#xff1a;cookie异常字符报错如下 2022-06-14 11:07:31 [WARN] - java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie 2022-06-14 11:07:31 [WARN] - at com.tongweb.web.util.http.Rfc6265CookieProcessor.valida…

力扣-查询近30天活跃用户数

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1141. 查询近30天活跃用户数二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.其他总结前言 一、题目&…

switch自定义样式

效果图&#xff1a; 圆点thumb &#xff08;selector_switch_thumb&#xff09; <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><!--switch按钮圆thumb的样式-…

ChatGPT爆火:AI崛起,这些职场人的机遇到了?

ChatGPT最近真的被全球吃瓜群众玩坏了&#xff01; 回答情感问题&#xff0c;编写代码&#xff0c;撰写slogan或脚本&#xff0c;甚至还被用于毕业生论文…… 这个连马斯克都由衷地称赞的ChatGPT&#xff0c;是一种全新的聊天机器人模型。上线2个月&#xff0c;就拥有了上亿活…

从零开始的机械臂yolov5抓取gazebo仿真(环境搭建篇上)

ubuntu18.04双系统以及ROS-melodic&moveit!安装 ubuntu18.04双系统安装 既然要用ubuntu来跑深度学习了&#xff0c;那肯定是要摒弃双系统的&#xff0c;虚拟机是真的带不动。 安装教程网上有很多&#xff0c;这里贴一个我参考的安装教程&#xff0c;和镜像下载地址&…

深度学习笔记:误差反向传播(2)

反向传播上一章内容可见http://t.csdn.cn/SHW3m 1 激活函数的反向传播 ReLU ReLU函数在x > 0的时候返回x&#xff0c;在X < 0的时候返回0。对该函数求导可得∂y/∂x 在x > 0时为1&#xff0c;在x < 0时为0 class Relu:def __init__(self):self.mask Nonedef …

【架构师】零基础到精通——架构演进

博客昵称&#xff1a;架构师Cool 最喜欢的座右铭&#xff1a;一以贯之的努力&#xff0c;不得懈怠的人生。 作者简介&#xff1a;一名Coder&#xff0c;软件设计师/鸿蒙高级工程师认证&#xff0c;在备战高级架构师/系统分析师&#xff0c;欢迎关注小弟&#xff01; 博主小留言…

Pycharm远程连接服务器配置常见问题

说明&#xff1a;配置过程中两个地方容易出错&#xff01;&#xff01;&#xff01; pycharm远程连接服务器完整教程_hehedadaq的博客-CSDN博客_pycharm远程 可参考该网址&#xff0c;但是在该过程中注意&#xff1a; 其他功能&#xff1a; 打开服务器的terminal(可开多个)&…

Spring源码分析:创建 BeanDefinition 流程

一、前期准备1.1 环境依赖<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.7.RELEASE</version></dependency><dependency><groupId&…

CentOs8 安装Jenkins一系列问题总结

CentOs8 安装 Jenkins 总结 文章目录CentOs8 安装 Jenkins 总结一、版本&安装二、Jenkins配置1. 配置 Java 路径2. 配置用户名称(一定要改成root&#xff01;&#xff01;&#xff01;)3. 启动 &停止& 重启 Jenkins 命令1. 启动2. 停止3. 重启三、成功四、问题记录…

同事每天早下班,原来是用了这8个开发工具

引言 工欲善其事必先利其器&#xff0c;说的就是工匠要想更加高效的做事情&#xff0c;就得先将工具变得锋利。那么对于程序员来说同样也是如此&#xff0c;如果要想每天早点下班&#xff0c;就必须借助于一些开发工具来提高自己的工作效率&#xff0c;今天慕枫就给大家总结一…

【手撕源码】vue2.x双向数据绑定原理

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门…

Teradata在华落幕,国产化崛起,袋鼠云数栈会是更好的选择吗?

2月15日&#xff0c;数仓软件巨头Teradata宣布根据其对中国当前和未来商业环境的慎重评估&#xff0c;将逐步结束在中国的直接运营&#xff0c;后续进入中国公司的关闭程序。 一石激起千层浪&#xff0c;这一消息&#xff0c;在国内的To B市场引起了广泛关注。Teradata这家进入…

mongoDB的安装与使用

MongoDB安装MongoDB官方网站&#xff1a;https://www.mongodb.com/try/download/community-kubernetes-operator2软件安装权限不足&#xff1a;https://www.javaclub.cn/database/56541.htmlstep1:打开安装包直接点击Nextstep2&#xff1a;继续点击Nextstep3&#xff1a;点击自…