zoukankan      html  css  js  c++  java
  • ACM_写数字

    写数字

    Time Limit: 2000/1000ms (Java/Others)

    Problem Description:

    把由1开始的自然数依次写下来:123456789101112……,重新分组,按四个数字为一组:1234,5678,9101,1121,3141,5161,…0348…,问第n个数是几?

    Input:

    输入包含多组测试数据,每组数据包含一个整数n(1<=n<=10000);

    Output:

    对于每组数据,输出第n个数(去除前导0)

    Sample Input:

    1

    Sample Output:

    1234
    解题思路:n最大取1w,说明拼接成的字符串长度至少为4w,简单计算一下可知只需将1~11000每一个数字拼接起来即可,然后取第n个四位数,有前导0要去掉,水过!
    需要掌握的知识点(将整型数据转化成字符串OJ可用函数):int sprintf( char *buffer, const char *format, [ argument] … );其头文件是stdio.h;
    参数列表:buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。[argument]...:可选参数,可以是任何类型的数据。
    返回值:返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。 sprintf 返回以format为格式argument为内容组成的结果被写入buffer 的字节数,结束字符''不计入内。即,如果"Hello"被写入空间足够大的buffer后,函数sprintf 返回5。同时buffer的内容将被改变。
    因为返回的是写入buf数组的字符个数,所以每次要叠加k,而buf+k刚好为每次写入数据的开始地址,最后还要加一个结束符。
    注意:函数itoa()同样可以将整型数据转化成字符串,但它是非标准函数,OJ是不识别的,因此常用函数为int sprintf()。
    AC代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=5e+5;
     4 char buf[maxn];int n,m,r,k=0;
     5 int main(){
     6     for(int i=1;i<=11000;++i)
     7         k+=sprintf(buf+k,"%d",i);
     8     buf[k-1]='
    ';
     9     while(~scanf("%d",&n)){
    10         r=0;
    11         for(int i=(m=4*(n-1));i<m+4;++i)r=r*10+buf[i]-'0';
    12         printf("%d
    ",r);
    13     }
    14     return 0;
    15 }
  • 相关阅读:
    RGB888转RGB666
    bmp文件格式详细解析
    Qt 5简介
    IntelliJ IDEA 快捷键
    猫猫学iOS之小知识之_xcode插件的删除方法_自己主动提示图片插件KSImageNamed有时不灵_分类或宏之类不能自己主动提示,
    sql server 2008出现远程过程调用失败
    Oracle-31-对视图DML操作
    uva 11127(暴力)
    各种排序算法的分析与实现
    我的Android进阶之旅------&gt;怎样解决Android 5.0中出现的警告: Service Intent must be explicit:
  • 原文地址:https://www.cnblogs.com/acgoto/p/9203097.html
Copyright © 2011-2022 走看看