2月18日(82-84题)

82.进制转换

题目描述

输入一个十进制数,将其化成N进制数输出(2≤N≤16)。 输出结果时,大于等于10的数字用字母代替,A代表10,B代表11以此类推。

代码

cpp 复制代码
#include <iostream>
#include <string>
#include <algorithm> 
#include <vector>

using namespace std;

int main() {
    long long m; 
    int n;

    // 定义字符映射表,方便将 10-15 转换为 A-F
    string table = "0123456789ABCDEF";

    while (cin >> m >> n) {
        
        // 特殊情况处理:如果输入是 0
        if (m == 0) {
            cout << "0" << endl;
            continue;
        }

        string result = "";
       
        while (m > 0) {
            int remainder = m % n;  // 取余数
            result += table[remainder]; // 根据余数查表得到字符并添加到结果中
            m /= n; // 除以基数,进入下一轮
        }

        // 因为是不断取余,得到的是逆序的(个位在前),所以需要反转字符串
        reverse(result.begin(), result.end());

        cout << result << endl;
    }

    return 0;
}

总结

核心逻辑

  • 使用 "除基取余法" (Modulus and Division)。
  • 将十进制数 mmm 不断对 NNN 取余数,得到的余数就是当前位的数值。
  • 将 mmm 除以 NNN,更新 mmm 的值,直到 mmm 变为 0。

字符映射 :余数如果是 0-9,直接输出数字;如果是 10-15,需要转换为 A-F。可以预定义一个字符串或数组 "0123456789ABCDEF",通过余数作为下标直接获取对应的字符。

顺序问题 :上述方法得到的数字是从"低位到高位"的(例如计算100的10进制,先得到0,再得到0,最后得到1),所以需要将结果字符串反转后再输出。

特判 :如果输入的数字 mmm 是 0,循环条件 while(m > 0) 一次都不会执行,需要单独处理输出 "0"。


83.表达式求值

以字符串形式输入仅有整数和加减(正负)号构成的表达式,输出该表达式的值。

代码

cpp 复制代码
#include <iostream>
#include <string>
#include <sstream> 

using namespace std;

int main() {
    string line;
    
    while (getline(cin, line)) {
        if (line.empty()) continue;

        stringstream ss(line);
        int sum = 0;
        int num;
        char op;

        ss >> sum;

        // 循环读取后续的 "运算符" 和 "数字"
        while (ss >> op >> num) {
            if (op == '+') {
                sum += num;
            } else if (op == '-') {
                sum -= num;
            }
        }

        cout << sum << endl;
    }

    return 0;
}

总结

按行读取 (getline) : 由于输入包含空格,且不同测试用例之间通过换行符分隔,使用 cin >> string 会因为空格中断读取,导致逻辑混乱。因此,使用 getline(cin, line) 一次读取整行字符串是最合适的。


84.删除字符

题目描述

从键盘输入一个字符串和一个字符,将输入字符从字符串中删除,输出新的字符串。如果字符串中没有此字符,则原样输出字符串。

代码

cpp 复制代码
#include <iostream>
#include <string>

using namespace std;

int main() {
   string s;
   char target;

   // 读取第一行字符串
   getline(cin, s);

   // 读取第二行要删除的字符
   // 使用 cin.get() 可以读取任意字符,包括空格。
   target = cin.get();

   // 遍历字符串并输出
   for (int i = 0; i < s.length(); i++) {
       if (s[i] != target) {
           cout << s[i];
       }
   }
   
   cout << endl;

   return 0;
}

总结

​ 最简单的方法不是真的去"删除"原字符串里的字符(,而是遍历原字符串,对于每一个字符:

  • 如果它 不等于 待删除的字符,就输出它。
  • 如果它 等于 待删除的字符,就跳过,什么也不做。

一开始的错误:在 C++ 中,cin >> target 有一个特性:它会自动跳过空白字符(空格、换行、制表符)。

如果题目测试用例的第二行是一个空格 (即要求删除字符串里的所有空格),cin >> target 会忽略这个空格,导致读取失败或者读取到错误的字符,从而无法正确删除空格。

后面改用 cin.get() 来读取字符,因为它不会忽略空格,而是老老实实地读取输入流中的下一个字符,无论它是什么。


翻译

​ 冷链审计和保障可能需要用对温度敏感的材料和/或电子设备对食品和药品进行标记;确保存储或监控易腐烂材料是否完好无损和/或需要关注,可能牵涉物体、制冷系统、自动数据记录系统和人类技术人员之间的通信。

​ 供应链管理是公司用于确保其供应链高效且具有成本效益的过程。供应链管理可以得到物联网系统的辅助。其理念是管理由相关企业或合作伙伴组成的整个网络,这些企业或合作伙伴根据最终客户的需求参与产品制造、交付和服务。

​ 在任何给定时间,市场力量都可能要求供应商、物流提供商、地点和客户以及供应链中任意数量的专业参与者做出改变。这种可变性对供应链基础设施产生重大影响

perishable ------ 易腐烂的 / 易变质的

intact ------ 完好无损的 / 完整的

entail ------ 牵涉 / 需要 / 导致

refrigeration ------ 制冷 / 冷藏

data logging ------ 数据记录

相关推荐
wangluoqi2 小时前
c++ 树上问题 小总结
开发语言·c++
艾醒2 小时前
打破信息差——2026年2月19日AI热点新闻速览
算法
不梦闲人3 小时前
15 面向对象程序设计
c++
追随者永远是胜利者3 小时前
(LeetCode-Hot100)62. 不同路径
java·算法·leetcode·职场和发展·go
追随者永远是胜利者4 小时前
(LeetCode-Hot100)56. 合并区间
java·算法·leetcode·职场和发展·go
wu_asia4 小时前
每日一练伍
算法
追随者永远是胜利者4 小时前
(LeetCode-Hot100)55. 跳跃游戏
java·算法·leetcode·游戏·go
近津薪荼4 小时前
优选算法——前缀和(7):连续数组
算法
ArturiaZ4 小时前
【day29】
数据结构·c++·算法