zoukankan      html  css  js  c++  java
  • POJ 1019

    #include<iostream>//  chengdacaizi 注释
    using namespace std;
    long long key[35000]={0};//在dev中可以这么定义,代表64bits
    int getDigit(int n)//计算位数的函数
    {
          int digit=1;
          while(n/10)
          {
              n=n/10;
              digit++;
          } 
          return digit;
    }      
    void init()//把每个数的位置存到数组里!
    {
          key[0]=0;
          for(int i=1; i<35000; i++)
            key[i]=key[i-1]+getDigit(i);
    } 
    int main()//主函数
    {
        int t;
        long long sum,n,i;
        init();
        scanf("%d",&t);
        while(t--)
        {
           cin>>n;//输入位置n;
           i=1,sum=0;      
           while(n>=sum+key[i])//计算在小于n 的情况下,前i-1段循环的位置总和;
           {
             sum=sum+key[i];   
             i++;
           }        
           if(n==sum)
              printf("%d
    ",(i-1)%10);//如果 n 正好等于前 i-1 段的位置总和 那么最后一个
           else                       //段的最后一个数就是所要求的那个数字
           {
                n=n-sum;    
                for(i=1; key[i]<=n; i++); //否则n将大于sum;可以想象是减去sum后多出来
                   n=n-key[i-1];       //一段;再用类似的方法,把前i段剪掉,保证 n 一定要
                if(n!=0)               //大于最后一段的位置; 剪下后剩下 最后的一小段;
                {                      //而n 所在的当前一段是1234...i;
                   int num=i;        //现在n 的长度从左向右 长度小于i or num
                   n=getDigit(num)-n;//理解成从左到右的长度方向
                   for(i=1; i<=n; i++)
                     num=num/10;
                   printf("%d
    ",num%10);
                }
                else 
                   printf("%d
    ",(i-1)%10); 
           } 
        }
        system("pause");
        return 0;
    }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    生成器笔记
    迭代器笔记
    hashilib_module
    Ubuntu操作及各种命令笔记
    python正则表达式2
    python正则表达式1
    python文件操作(with关键字)
    python文件操作
    python包
    python模块
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563221.html
Copyright © 2011-2022 走看看