回 帖 发 新 帖 刷新版面

主题:书的页码问题

一本书的页码,第一页是1,第二页是2,以此类推。每敲一次键盘就能打出一个数字,例如打出1需要敲一次,打出10需要两次。现在知道了总共敲打次数的总数n ,求这本书的页数。求一个程序

回复列表 (共3个回复)

沙发

能把题目讲清楚吗?

板凳

问题是:知道总数N,求页码?
第一页点1次,第二页点2次。。。

3 楼

我猜可能楼主想表达的意思可能是:
假如页数为13,则 1,2,3,4,5,6,7,8,9,10,11,12,13 一共需要敲键盘17次
现在则反过来,已知需要敲键盘17次,求页数13

如果是这样的话
1-9页,每页需要敲键盘1次,共9页
10-99页,每页需要敲键盘2次,共90页
100-999页,每页需要敲键盘3次,共900页
…… 依次类推

[code=c]
#include <stdio.h>

int foo( int n )
{
    int pages = 0;
    int mul10 = 1;
    int i = 1;
    if( n < 0 )
        return -1;
    for( ; n>9*mul10*i; mul10*=10,++i )
    {
        pages += 9*mul10;
        n -= 9*mul10*i;
    }

    if( n%i )
        return -1;
    pages += n/i;
    return pages;
}

void test( int n )
{
    int pages = foo(n);
    if( pages == -1 )
        printf( "不可能的敲击数\n" );
    else
        printf( "页数: %d\n", pages );
}
 
int main()
{
    test( 8 );
    test( 17 );
    test( 261 );

    return 0;
}
[/code]

我来回复

您尚未登录,请登录后再回复。点此登录或注册