请写列表写过程并解答

请务必列表写

img


#include<cstdio>int main(){int i,j,L,n,k,s,t;int b[11];scanf("%d%d",&L,&n);s = L;k = 1;t = L;while(s<n){k++;t *= L;s += t;}s -= t;n = n-s-1;for(i=1; i<=10; i++){b[i] = 0;}j = 11;while(n>0){j--;b[j] = n%L;n /= L;}for(i=10-k+1; i<=10; i++){printf("%c",'A'+b[i]);}return 0;}
输入:4 167
输出:

复制代码通过编译器运行可得到结果。

输出结果:BBAC
列表如下:

img

电子版本:

链接: https://pan.baidu.com/s/1a_ubStuvpsolLh_JYUykGA 提取码: 4dh2

直接将两个数带入走一遍程序就可以了
我将程序分为4个部分
第一部分从第9行开始


int L=4,n=167
    s = L;
    k = 1;
    t = L;
    while (s < n)
    {
        k++;
        t *= L;
        s += t;

    }

第一部分表格:

循环前第一次循环第二次循环第三次循环
s=4s=20s=84s=340
k=1k=2k=3k=4
t=4t=16t=64t=256
n=167n=167n=167n=167

s<n条件不符合,第一部分结束
第二部分:


    s -= t;
    n = n - s - 1;
    for (i = 1; i <= 10; i++)
    {
        b[i] = 0;
    }

s=84
n=82
b[1-10]=0

第三部分

j = 11;
    while (n > 0)
    {
        j--;
        b[j] = n % L;

        n /= L;
    }

循环前第一次循环第二次循环第三次循环第四次循环
j=11j=10j=9j=8j=7
n=82n=20n=5n=1n=0
b[j]=--b[j]=2b[j]=0b[j]=1b[j]=1

n=0跳出循环
n除有余数时会赋值为商,而非四舍五入

此时b数组的情况:

012345678910
未赋值0000001102

此时k的作用也就知道了,就是算出有效的数个数
而b数组把所有值放在末尾储存,所以可以算出第一个有效值的位置
然后输出

第四部分

    for (i = 10 - k + 1; i <= 10; i++)
    {
        printf("%c", 'A' + b[i]);
    }
i的值78910
b[i]的值1102
输出结果BBAC