C语言巧用循环处理数字下篇(位数统计,正序、逆序输出)

上篇我们介绍了C语言里的除法运算和取模运算的特性,接下来我们就利用这些特性,外加循环结构来对数字进行处理(我们以十进制为例,处理形式包括位数统计,数字的正序、逆序输出):
1.数字位数统计
位数统计的原理是建立在除法丢弃个位的基础上的,下面我将核心代码分享给大家:
code1:

int Figure(int n)
{
    int count = 0;
    do
    {
        count++;
        n /=10;
    }while(n != 0);
    return count;
}

分析:这段代码附加了do-while循环结构和简单计数器原理的基本知识,后边我将一一补充这方面的知识。值得大家注意的是,此处运用了do-while循环而不是while循环,原因是由于0的存在,在位数统计过程中,0仍然属于一个一位数,当使用while循环时,由于循环条件中n==0,则while(n != 0)不成立,循环体内的语句不予执行,计数器count++也就没有发生改变,因而存在健壮性不全的问题。而do-while循环巧妙的解决了第一次循环所出现的问题,即语句先执行一次,再进行判断,与预期的结果相符。
2.数字逆序输出
数字的逆序输出包括了除法丢弃个位和取模保留个位两方面的知识,具体实现方法在上篇的最后一个版块有介绍,下面我将核心代码分享给大家:
code2:

void PrintReverse(int n)
{
    do
    {
        printf("%d ",n%10);
        n /= 10;
    }while(n != 0);
    printf("\n");
}

分析:这段代码中比较实用的是先取模打印输出,再进行除法运算,舍弃了加入中间变量的过程,其余没有任何特别之处。
3.数字正序输出
数字的正序输出相对来说比较复杂,具体实现思路分为以下三个部分:要将一个数字的每个位上的数字正序输出,首先要获得该数字的位数,接下来用除法获取最高位,最后利用取模运算降低数字的位数,为下一次除法运算做准备。下面我将核心代码分享给大家:
code3:

void PrintOrder(int n)
{
    int count = Figure(n);
    int power = 1;
    for(int i=0;i<count-1;i++)
    {
        power *= 10;
    }

    do
    {
        printf("%d ",n/power);
        n %= power;
        power /= 10;
    }while(n != 0);
    printf("\n");
}

分析:代码的初始部分调用我们第一个版块数字位数统计的函数实现了数字位数的计算,接下来利用了循环和我们上一篇第一个版块数字取高位的方法(num/10^(dig-1))将数字与除法运算的基数确定下来,最后结合除法以及取模运算的特性最终实现了数字的正序输出。

其他进制的数字处理方式与十进制方法相同,不同点在于除法和取模运算的基数不同,只要大家铭记是几进制,我们就用该进制的数字与其基数做运算即可(例如二进制数字,我们就用数字(num)/2或者(num)%2即可),大家有兴趣可以试试,有问题或者有什么好的建议可以随时联系。

以上就是我介绍的巧用循环对数字处理的基本方法,希望在后续的工作、学习中能对大家有所帮助。

猜你喜欢

转载自blog.csdn.net/sqrt_2/article/details/79510848
今日推荐