今天这题本来以为很简单的,却花了近一个半小时。
当遇到错误的时候,试试一步一步输出结果调试。
思路:
计算一下最高位的权值,和最高位的值,两者相乘。
原来的数与相乘的结果做差即可。
心得:
C,C++在类型转换的时候会损失一部分精度。
所以,在转换的时候,不妨先用double保存。
最后输出的时候再转化成int,减小精度的损失。
代码:
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
unsigned int w; // 10 < w < 1 000 000
int a;
cin>>a;
while(a--)
{
cin>>w;
for(int i=5;i>0;i--)
if( w / pow(10,i) >=1 ) //20456
{
// cout<<pow(10,i)<<endl; //计算单位 10000
// cout<< w/pow(10,i)<<endl; // 20456 2*10000
// cout<<floor( w/pow(10,i))<<endl;
double num = floor( w/pow(10,i)) * ( pow(10,i) );
cout<< w -num <<endl;
break;
}
}
return 0;
} <strong>
</strong>