xxxxxxxxxxfor (int j = i-1; j>=0; j--){ if (b[i] >= 0 && b[i] <= 9) cout << b[i]; // ❌ 用了 i 而不是 j
xxxxxxxxxx // 位权法转十进制 long long ten = 0; int len = x.size(); // 数字的长度 for (int i = 0; i < len; i++) { // 计算当前位的权:n^(len-1-i) long long weight = 1; for (int j = 1; j <= len - 1 - i; j++) { weight = weight * n; } // 累加:数字 × 权 ten = ten + a[i] * weight; }如果 len-1-i = 2,循环就乘 2 次 n,得到 n²
如果 len-1-i = 1,循环就乘 1 次 n,得到 n¹
如果 len-1-i = 0,循环 0 次,得到 n⁰ = 1
xxxxxxxxxxfor (int i = 0; i < x.size(); i++){ // 从左到右,边滚边加 ten = ten * n + a[i];}3:4:2:
| 方法 | 思路 | 优点 |
|---|---|---|
滚雪球法(ten = ten * n + a[i]) | 从左到右,边乘边加 | 代码短,效率高 |
位权法(ten += a[i] × n^(len-1-i)) | 先算每位权重,再累加 | 思路直观,符合数学定义 |
若代码逻辑无误,却TLE,匹夫可尝试使用scanf和printf代替cin和cout! ——冬冬
Important
scanf和printf比cin和cout更快
先看答案:
xxxxxxxxxxusing namespace std;int main(){ int ans = 0,n,x; scanf("%d",&n); for(int i = 0;i<n;i++){ scanf("%d",&x); ans ^= x; } printf("%d",ans); return 0;}Caution
这个题不要用数组!!!因为开数组[10000000000]会RE!会用80GB内存(是内存,不是磁盘空间!)而且O(n²) 算法会超时,而且不能用cin和cout,因为测试点#1会超时(TLE)
异或运算 = 让相同的数字互相抵消,最后只留下没有伴的那个。
举个栗子🌰:
xxxxxxxxxx5 ^ 5 = 0 (相同抵消)8 ^ 0 = 8 (和 0 异或,不变)3 ^ 4 ^ 3 = ? 先算 3 ^ 3 = 0,再算 0 ^ 4 = 4所以结果 = 4 (落单的那个被留下了!)
定义代码如下:
xxxxxxxxxxstring x;字符串的输入部分是比数组简单的,因为这是一个变量。
xxxxxxxxxxcin >> x;字符串的调用与数组基本相同,都是名称[索引]的结构。赋值的操作也是名称[索引] = '要赋值的内容'
Caution
注意:在赋值时等号右边的内容必须为
这里用循环赋值的结构来写
xxxxxxxxxxfor(int i = 0;i<x.size();i++){//size()是获取字符串长度的意思,会在函数部分出现 x[i] = 'd';}索引也是与数组相同,从0开始,到长度-1结束。以上代码执行后,字符串变量x将会变为“ddd.....”(字符串+原来有多长就有多少个“d”)
Note
插播一条知识点:
在字符串的使用中unsigned int 或 unsigned long long会比使用int和long long更好。因为它们没有符号位,在处理负数时不会出现数据/索引错误的样子
string 常用操作与函数速查
字符串拼接:直接使用
+或+=运算符。字符串比较:可直接用
==、!=、<、>等比较运算符。子串查找与提取:
s.find("str"):查找子串,找到返回起始索引,否则返回string::npos。
s.substr(pos, len):从pos开始提取长度为len的子串。字符串修改:
s.append("str"):在末尾追加字符串。
s.insert(pos, "str"):在pos位置插入字符串。
s.replace(pos, len, "str"):替换从pos开始长度为len的子串。
s.erase(pos, len):删除从pos开始长度为len的子串。
s.push_back(ch)/s.pop_back():在末尾添加或删除一个字符。状态与清空:
s.empty():判断字符串是否为空。
s.clear():清空整个字符串。字符处理函数
配合
<cctype>头文件,可以方便地处理单个字符。这些函数也属于三级考点范围。大小写转换:
toupper(c)将字符转换为大写,tolower(c)转换为小写。 字符分类判断:isupper(c)和islower(c)分别判断是否为大、小写字母;isdigit(c)判断是否为数字;isalpha(c)判断是否为字母。——Deepseek
我再deepseek的基础上再补几个函数:
| 函数名称 | 用法 | 用处 |
|---|---|---|
| size() | 变量名.size() | 获取变量的长度 |
| length() | 变量名.length() | 与size()相同 |
| empty() | 变量名.empty() | 获取字符串长度是否为0(在某些情况下比length() == 0更优) |