您的位置:首页 > 其它

POJ_1019

2010-04-13 15:37 190 查看
注意要使用 unsigned int类型, 还有就是log10((double) i) + 1能够求出数字i的位数, 当然也可以用连除10的方式得到...

还有就是pow()的两个参数都是float类型的, 需要强制转换一下...

 

#include <iostream>
#include <cmath>
using namespace std;
int getBit(unsigned int index)
{
unsigned int bit;
int i;
int segCount = 0;
unsigned int totalCount = 0;
unsigned int segPos = 0;
/*找到i所在的数段*/
for(i=1; ; i++)
{
segCount += log10((double)i) + 1;
totalCount += segCount;
if(totalCount >= index)
break;
}
/*segPos是i所在的数段的开始*/
segPos = totalCount - segCount;

/*在i所在的数段中找到i所在的数字*/
for(i=1; ; i++)
{
segPos += log10((double)i) + 1;
if(segPos >= index)
break;
}
bit = (i / (int)(pow((float)10, (float)(segPos - index)))) % 10;
return bit;
}
int main()
{
int caseCount = 0;
cin>>caseCount;
while(caseCount--)
{
int bit;
unsigned int index = 0;
cin>>index;
bit = getBit(index);

cout<<bit<<endl;
}
return 0;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  float