B1057 数零壹

1057 数零壹 (20 分)

给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0、多少 1。例如给定字符串 PAT (Basic),其字母序号之和为:16+1+20+2+1+19+9+3=71,而 71 的二进制是 1000111,即有 3 个 0、4 个 1。

输入格式:

输入在一行中给出长度不超过 105、以回车结束的字符串。

输出格式:

在一行中先后输出 0 的个数和 1 的个数,其间以空格分隔。

输入样例:

PAT (Basic)

输出样例:

3 4

参考代码

#include <iostream>
#include <string>
using namespace std;
int main(){
    int sum=0, cnt0=0, cnt1=0;
    string str;
    getline(cin,str);
    for(int i=0;i<str.length();i++){
        if(str[i]>='A' && str[i]<='Z'){
            sum+=(str[i]-'A'+1);
        }
        else if(str[i]>='a' && str[i]<='z'){
            sum+=(str[i]-'a'+1);
        }
    }
    while(sum){
        if(sum%2==0) cnt0++;
        else if(sum%2==1) cnt1++;
        sum/=2;
    }
    cout<<cnt0<<" "<<cnt1<<endl;
    return 0;
}
### 字节与字符的关系 字节(Byte)是计算机存储据的基本单位,通常由8位二进制组成。字符(Character)则是人类可识别的符号集合中的成员,例如字母、字、标点符号等。为了使计算机能够处理字符,需要通过某种机制将字符映射到字节序列上,这就是字符集和字符编码的作用。 #### 字符集 字符集定义了一组逻辑上的字符及其对应的编号[^1]。例如,ASCII字符集中包含了128个字符,每个字符都有唯一的编号。Unicode是一个更广泛的字符集,涵盖了几乎所有的书写系统的字符。 #### 字节与字符的映射关系 字符编码规定了如何将字符集中的字符转换为字节序列以便于存储或传输。这种映射可能是一对一或多对一的关系。例如,在ASCII编码中,字符`A`被映射为十进制值65,其二进制表示为`01000001`。而在UTF-8编码下,某些非ASCII字符可能会占用多个字节来表示[^4]。 ### 编码与解码的概念 #### 编码过程 编码是指按照特定规则将源据(通常是字符或其他抽象形式的据)转化为目标格式的过程。在这个过程中,原始信息被翻译成适合机器操作的形式—即一系列比特串或者说是字节组。对于文本来说,这意味着依据选定的字符编码标准把可见的文字转变成为内部储存用的一连串零壹组合[^3]。 #### 解码过程 相对应地,解码是从已有的编码状态恢复原来含义的操作反向流程。也就是说,当我们接收到一段经过编码处理过的据之后,我们需要利用相应的算法重新解析这些据背后所代表的实际意义——也就是还原出最初的那些字符或者其他类型的资料内容出来[^3]。 ### 正确公式的描述 虽然不存在严格意义上的学公式用于表达整个编/解码过程,但是可以根据具体使用的编码方案给出相应指导原则: 1. **单一字节情况下的简单映射** 如果采用的是像ISO Latin 1这样的单字节编码体系,则可以直接建立一对一联系:每一个独立存在的字符对应唯一确定的一个八位组值。 2. **多字节复杂结构** 对于支持全球各种语言文字表现需求的大容量编码方法如UTF-8而言,由于不同区域内的字符量差异巨大,因此采取变长设计思路变得尤为重要。此时需遵循如下准则完成转化工作: - 当遇到属于基础拉丁字母范畴之内且位于U+0000至U+007F区间之内的个体单元时,仅需保留原有布局不变即可满足条件; - 若超出前述界限之外,则依照既定模式填充额外所需字段直至达到最终形态为止。 以下是基于Python实现的部分示例代码展示实际应用情形: ```python # 示例演示 UTF-8 编码与解码 original_text = "你好世界" encoded_bytes = original_text.encode('utf-8') decoded_text = encoded_bytes.decode('utf-8') print(f"Original Text: {original_text}") print(f"Encoded Bytes: {list(encoded_bytes)}") print(f"Decoded Text :{decoded_text}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值