如何反转整数转小数对的while循环,正确还原初始整数值?
问题原因
- 推导公式逻辑错误
正向执行逻辑为「初始整数连续执行redo次除以2得到最终的小数整数部分」,对应数学关系为 初始值 ≈ decimal1 * (2^decimal2),你写的(decimal1 * 2)^decimal2逻辑完全错误,计算结果偏差极大。 - 反向代码存在多处逻辑bug
- 变量未初始化:
redo、InitialInteger两个变量在使用前未赋值,运行会直接报错。 - 循环逻辑偏离需求:循环体内执行的
redo -= 1、InitialInteger += decimal2 * 2操作和「连续乘以2」的还原目标没有关联。 - 死循环风险:循环判断条件为
decimal2 > 0,但循环体内从未修改decimal2的取值,程序会陷入无限循环。
- 变量未初始化:
- 精度损失提示
正向代码使用整数截断除法,会丢弃每次除法产生的小数部分,因此仅通过(decimal1, decimal2)无法100%还原原始整数,只能得到原始值的近似范围,如果需要精准还原,需要在正向计算时额外保存每次除法的余数信息。
修正后的反向实现代码
// 示例输入字符串为正向输出的"5,5" string Decimal = "5,5"; int decimal1 = Int16.Parse(Decimal.Split(',')[0]); int decimal2 = Int16.Parse(Decimal.Split(',')[1]); int initialInteger = decimal1; // 连续乘以2,执行次数等于decimal2的值 while (decimal2 > 0) { initialInteger *= 2; decimal2--; } // 本次输出结果为 5 * 2^5 = 160 Console.WriteLine(initialInteger);
内容的提问来源于stack exchange,提问作者Moix
相关产品推荐
相关产品推荐

