正文

PKU1019解题报告2008-09-06 11:39:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/38122.html

分享到:

PKU1019解题报告题目大意:一串数由1写道k.1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011初始时候k=1.写完一次后k增加1.重新从1写到k,以此循环.求这串数的第n位这串数的特征为:一个数比他的前一个数多了(int)log(10)+1位.其他完全相同第一个while()循环求出k;即k+1写完时,位数超过n.写完k时,位数不足n第二个while()循环求出i(i为1`k中的数字);要求第i+1个数写完时,位数超过n.第i个数时,位数不足n.从而求出i不知道这种方法叫什么.应该是逐步求精的思想吧.题目中使用函数log10()来求出一个数字的位数.log10在math.h 中声明:形式为_CRTIMP double __cdecl log10 (double);如果没有将其参数定义为double类型,将会编译错误.#include <iostream>#include <cstdlib>#include <math.h>using namespace std;int main(){    int t;    cin>>t;//第一行输入    for(;t>0;t--)    {        unsigned long int n;        cin>>n;        unsigned long int now=0,last=0;        double i=0;//math.h里边是这样定义的:_CRTIMP double __cdecl log10 (double);               //所以只能将i定义为double 型,否则编译错误        while(now<n)        {            last+=(int)log10(++i)+1;            now+=last;        }        now-=last;        n-=now;        now=0;        i=0;        while (now<n)//while循环求出已经写到了数字i.        {            now+=(int)log10(++i)+1;        }        now-=(int)log10(i)+1;        n-=now;        int j=(int)log10(i)+2;        j=j-n;//此时要求的为i从前往后的第n位数        for(int k=1;k<j;k++)            i=i/10;//从后往前求i的第j位        j=(int)i;//        j%=10;        cout<<j<<endl;    }    system("pause");    return EXIT_SUCCESS;}

阅读(3193) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册