如何在C ++中替换整数的前两位数字?

how to replace the first two digits of an integer in c++?

本文关键字:两位 数字 整数 替换      更新时间:2023-10-16

我面临以下问题。

我有一个 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 并除以。重复乘法和除法相同的数字可以简化为乘以或除以该数字到重复次数的幂。通过基数对数找到位数也来自相同的移位行为,但这并不那么直观。

不过,使用字符串操作会更简单。