有一个四位数,在某一位后加上一个小数点,与原数相加得4003.64,求这个四位数。

有一个四位数,在某一位后加上一个小数点,与原数相加得4003.64,求这个四位数。

请尽快回答!!今天晚上结!

四位数为整数,在某一位后加小数点,再与原数相加后为4003.64,小数点后有两位,可知小数点加在原四位数的百位数后面。
设原数为x,加了小数点后为x/100
x+x/100=4003.64
x=3964
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-10
方法1:使用穷举法:(以下使用的是语言是 c# )
//让数字从最小的4位数1000到最大的4位数9999循环
bool breakOut = false;
for (float i = 1000; i < 10000; i++)
{
//让小数点分别移到十位数,百位数,千位数后面
//用除10,100,1000实现
for (int j = 10; j <= 1000; j = j * 10)
{
if (i / j + i == 4003.64)
{
MessageBox.Show(i.ToString());
//设置外层循环退出标记
breakOut = true;
//找到答案时跳出内层循环
break;
}
}
//已找到一个答案,退出外层循环
if(breakOut)
{
break;
}

}

运行后答案是3964

以上程序可以进一步优化
因为已知条件1:原数是整数,2:相加后的值是4003.64
所以可以知道 这个小数点是加在原来的数字的xx.xx上(即百位后面),还可以进一步得知该数字的后两位是64
所以原数字为[xx64],那么外层循环i就从1064开始循环即可且,i的递增改为100,内层循环时除100即可,而无须循环.
优化后:
for (float i = 1064; i < 10000; i=i+100)
{
if (i / 100 + i == 4003.64)
{
MessageBox.Show(i.ToString());
break;
}
}
优化前程序共循环了8894次,优化后程序只循环了30次.

更进一步优化
已知一个两位数(精度2)+一个4位数=4003.64
按这个两位数以最大值计算即99.99,那么4003.64-99.99=3903.65(
也就是说这个原数至少为3904,另满足末两位为64的条件,则原数至少为3964
for (float i = 3964; i < 10000; i=i+100)
{
if (i / 100 + i == 4003.64)
{
MessageBox.Show(i.ToString());
break;
}
}
所以此程序只需要循环一次.
按第三种方法,口算即可得出答案.
相似回答