如何在C ++中替换整数的前两位数字?
how to replace the first two digits of an integer in c++?
我面临以下问题。
我有一个 6 位正整数值,例如120117
我希望能够将前两位数字(在本例中为12
(更新为:
- 如果该 2 位数字小于或等于 20,则为 50
- 如果该 2 位数字大于 20,则为 60。
因此,上面示例的最终输出将是500117
。
所有输入均为正 6 位整数。
我知道我可以将此整数转换为字符串,然后使用.substr
将 50 或 60 插入所需位置,但我不想使用任何与字符串相关的操作。我只想使用算术运算。
我真的不知道该怎么做。任何帮助将不胜感激。
让我成为输入(120117(。设 D 是 ⌊log10(I(⌋ + 1 给出的位数关于您的编辑:您可以跳过此操作,如果位数恒定,则只使用 6。设 T 为 10D - 2。设 P 为使用整数除法的 I/T。此结果是前两位数字。将其与 20 进行比较,如果谓词匹配,则根据比较结果让 S 为 60 或 50。让输出为 I + (S - P( * T。
你能给出一个伪代码吗?
I = 120117
D = 6
T = pow(10, D - 2)
P = I / T
S = 50 if P <= 20 else 60
return I + (S - P) * T
这里的逻辑依赖于这样的观察,即将数字乘以基数等效于向左"移动"数字,除法等效于向右移动。由于我们正在处理十进制数字,因此我们乘以 10 并除以。重复乘法和除法相同的数字可以简化为乘以或除以该数字到重复次数的幂。通过基数对数找到位数也来自相同的移位行为,但这并不那么直观。
不过,使用字符串操作会更简单。
相关文章:
- 找到两对数字,使它们的乘积的绝对差最小化
- 输出错误,问题是找到总和5000位数字cpp
- 顺时针迭代旋转 3 位数字
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- C++通过数字比较两个数字
- 使用 cin 时接受小数点后的 2 位数字
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 如何在C ++中替换整数的前两位数字?
- 如何对两个 4 位数字进行乘法,将它们视为 C++ 中的多项式
- 如何使用位操作在单个整数中编码和解码两个数字
- 将两位数字转换为低内存表示的最快方法
- 查找两个 3 位数字的乘积(欧拉项目 #4)
- 如何在计算器中将大数字表示为小数点后两位C++
- 程序查找并打印第一个完全正方形 (i*i),其最后两位数字都是奇数
- 转换为十六进制并删除最后两位数字
- 我将如何在不使用 if 语句、字符数组、apstring 或 atoi 的情况下将带有两位数字的字符串转换为 int
- 两个数字按位连接
- 四舍五入浮点数:精确地输出小数点后的两位数字
- 我如何在C/ c++中减去两个IPv6地址(128位数字)
- 将字节转换为两位十六进制数字