C语言入门语法题详解(2)

1.十进制转六进制

题目描述:

小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。

题目任务:

输入一个正整数n ,输出一行为正整数n表示为六进制的结果。

输入输出要求:

输入要求:输入一个正整数n  (1 ≤ n ≤ 109)。

输出要求:输出一行,为正整数n表示为六进制的结果。

输入输出案例:

案例1

输入:6

输出:10

案例2

输入:120

输出:320

代码实现:

#include <stdio.h>

int main()
{
    //定义变量满足输入要求
    int n = 0;
    scanf("%d", &n);
    
    //创建数组将六进制的每一位存入,并定义一个计数变量
    int count = 0;
    int arr[100] = { 0 };
    
    //将十进制的数转化为六进制
    while (n)
    {
        arr[count] = n % 6;
        count++;//多执行了一次
        n /= 6;
    }

    //输出
    for (int i = count - 1; i >= 0; i--)//count需要-1
    {
        printf("%d", arr[i]);
    }
    return 0;
}

补充:

这个题目是没有难点的。如果我们的数学基础比较好,对于十进制的任何数求其对应的其他进制数应该游刃有余。例如我们求十进制数 6 的六进制数。

 这个计算过程高中数学应该讲过,如果有疑问可以自行百度,这里不再赘述。

可以看到代码的核心部分,每次取余的结果都存入数组中,每次取商的结果都用作下一次取余。但是在输出的循环部分,循环体的限制条件我定为了:count-1。这是因为:当n为1进入核心部分的循环之后,count++会执行一次,接下来执行n/6的操作,但是此时n/6的结果为0,下一次循环不进入,所以count++多余执行了一次。

这个算法并不是最优的算法,但是是我本人极限脑子爆炸能力有限太菜了想到的最优算法。

2.回文对称数

题目描述:

今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。

题目任务:

输入一个整数n,从1开始按从小到大的顺序输出所有回文数。

输入输出要求:

输入要求:输入一个整数n(1 <= n <= 100000)。

输出要求:从1开始按从小到大的顺序输出所有回文数。

输入输出案例:

案例1

输入:10

输出:1
           2
           3
           4
           5
           6
           7
           8
           9

代码实现:

#include <stdio.h>

int main()
{
    //定义满足输入要求的变量
    int n = 0;
    scanf("%d", &n);
    
    //判断回文并按序输出
    int i = 0;
    for (i = 1; i <= n; i++)
    {
        int func = 0;
        int num = i;
        while (num)
        {
            //将数字的最后一位单独拿出来,然后把它放在高位
            func = func * 10 + num % 10;
            num /= 10;
        }
        if (func == i)
            printf("%d\n", func);
    }
    return 0;
}

补充:

这个题大概率会往数组倒序那方面考虑包括我这个菜鸡在内。其实当我们认真分析一下,数字回文,不就是正着看和倒着看的值一样么?

所以我对for循环里面的while循环作出解释,例如我们判断 123 是不是回文:

原理就是这么个原理,但是代码这块我只能这么解释:本来的func值为0,我们取123的3放如func中,此时func就变成了3,下一次进来func*10=30 再加上123的2,就等于32,下一次进来func*10=320 再加上123的1 ,就等于321。

为什么定义num变量在上一篇博客有讲。

猜你喜欢

转载自blog.csdn.net/weixin_59913110/article/details/125037245