1 条题解
-
0
📝 题目大意
给定一个整数 (),根据 的位数对其做近似处理:若 不超过 3 位数则原样输出;若超过 3 位数,则保留最高 3 位,其余低位全部置零。
💡 解题思路
-
题目分析:
- 最大为 ,即最多 9 位数字。
- 题目给出的分段规则看似复杂,但本质上可以统一为一条规律:保留最高 3 位有效数字,其余低位全部置零。
- 当 不足 3 位时(),"保留最高 3 位"就是保留全部数字,与原样输出等价。
-
算法推导:
- 将 以字符串形式读入,记其长度为
len。 - 保留前 个字符原样输出,对应题目中的"最高 3 位"。
- 从第 4 位开始(即
i = 4),全部输出'0',对应题目中的"剩余低位全部置零"。 - 以字符串的方式处理可以完全避免
pow或大数除法的精度问题,代码简洁且不易出错。
- 将 以字符串形式读入,记其长度为
-
边界与细节:
- :长度为 1,只输出
'0',不会进入补零循环,结果正确。 - 恰好为 3 位数(如 ):
len = 3,前 3 位全部输出,补零循环(i=4)不执行,结果正确。 - 为大数(如 级别):前 3 位保留,其余补零,与规则完全一致。
- :长度为 1,只输出
⏱️ 复杂度分析
- 时间复杂度:,其中 是 的位数(最多 9),即常数级 。
- 空间复杂度:,用于存储字符串,同样为常数级 。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main (){ char c[110]; cin >> c + 1; // 从下标 1 开始存储,方便与数学位数对应 int len = strlen(c + 1); // 计算数字字符串的长度 // 输出前 3 位(或全部,如果长度不足 3) for (int i = 1; i <= len && i <= 3; i++) cout << c[i]; // 从第 4 位开始,全部补零 for (int i = 4; i <= len; i++) cout << "0"; return 0; } -
- 1
信息
- ID
- 713
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 2
- 已通过
- 1
- 上传者