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 ------ 数据记录
