历年CSP-J初赛真题解析 | 2020年CSP-J初赛阅读程序(22-27)

学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。

附上汇总贴:历年CSP-J初赛真题解析 | 汇总_csp历年真题_热爱编程的通信人的博客-CSDN博客


#include <iostream>
using namespace std;

long long n, ans;
int k, len;
long long d[1000000];

int main() {
    cin >> n >> k;
    d[0] = 0;
    len = 1;
    ans = 0;
    for (long long i = 0; i < n; ++i) {
        ++d[0];
        for (int j = 0; j + 1 < len; ++j) {
            if (d[j] == k) {  //进位
                d[j] = 0;
                d[j + 1] += 1;
                ++ans;  //只在进位时发生改变,记录进位次数
            }
        }
        if (d[len - 1] == k) {  //高精度加法,进位操作
            d[len - 1] = 0;
            d[len] = 1;
            ++len;  //只在高位进位时发生改变,即记录数字长度
            ++ans;
        }
    }
    cout << ans << endl;
    return 0;
}

假设输入的n是不超过2^62的正整数,k都是不超过10000的正整数,完成下面的判断题和单选题:

22、若k=1, 则输出ans时, len=n。( )

【答案】:错

【解析】

k=1时,len始终为2。所以错误

23、若k>1, 则输出ans时, len一定小于n。( )

【答案】:错

【解析】

n=1时,len等于1,所以错误

扫描二维码关注公众号,回复: 16670117 查看本文章

24、若k>1, 则输出ans时, k^len一定大于n。( )

【答案】:对

【解析】

k进制下的2位数n(len=2),一定小于k²。如10进制下的2位数,都是小于100的。2进制下的2位数,一定小于4。所以正确

25、若输入的n等于10^15,输入的k为1,则输出等于( )

A.1

B.(10^30-10^15)/2

C.(10^30+10^15)/2

D.10^15

【答案】:D

【解析】

k=1时,len=2,只会在低位(即d[1])进位,所以进位数量和数字大小相同,选D

26、若输入的n等于205,891,132,094,649(即3^30),输入的k为3,则输出等于( B )

A.3^30

B.(3^30-1)/2

C.3^30-1

D.(3^30+1)/2

【答案】:

【解析】

d[0]向d[1]进位,每3次进一位,进位次数(ans)是3^29

d[1]向d[2]进位,每9次进一位,进位次数(ans)是3^28

d[2]向d[3]进位,每3^3次进一位,进位次数(ans)是3^27

...

d[29]向d[30]进位,进位次数(ans)是3^0

求和就是3^29+3^28+3^27+...+3^0,根据等比数列求和公式,等于(3^30-1)/2

27、若输入的n等于100,010,002,000,090,输入的k为10,则输出等于( )

A.11,112,222,444,543

B.11,122,222,444,453

C.11,122,222,444,543

D.11,112,222,444,453

【答案】:D

【解析】

d[0]向d[1]进位,进位次数为10001000200009

d[1]向d[2]进位,进位次数为1000100020000

d[2]向d[3]进位,进位次数为100010002000

d[3]向d[4]进位,进位次数为10001000200

d[4]向d[5]进位,进位次数为1000100020

d[5]向d[6]进位,进位次数为100010002

d[6]向d[7]进位,进位次数为10001000

d[7]向d[8]进位,进位次数为1000100

d[8]向d[9]进位,进位次数为100010

d[9]向d[10]进位,进位次数为10001

d[10]向d[11]进位,进位次数为1000

d[11]向d[12]进位,进位次数为100

d[12]向d[13]进位,进位次数为10

d[13]向d[14]进位,进位次数为1

最后计算为11112222444453

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/132881170
今日推荐