解题思路:

  1. 位数的判断:考虑用“/”,C语言中的'/',如果操作数(即除数和被除数)都是整型(整数),则结果会自动舍弃小数部分,例如123/10 按数学计算即为12.3,C语言输出为12. 对比123和结果12,我们发现C语言中的'/'能够达到移位的操作;因此我们可以依次移位并使用一个计数变量,每移一位计数变量加一,直至最终移位完成原数据变成零,为此我们可以套用循环来执行;

    代码如下:

          scanf("%d",&x);

          while(x)

          {

               x/=10;

               counter++;

           }

           printf("%d\n",counter);

   2.正序输出每一位上的数据,数字之间用空格间隔,末尾没有空格:

     考虑'%10’它可以每次得到每个数据的个位数,所以我们考虑我可以对数据进行移位操作,让它的每一位都依次出现在个位上,而后我们令其对10取余即可。

例如123,我们可以先用123/100此时我们得到1;再对1对10取模即可;注意此时一定不要省略这个取模操作!(原因见下文注意事项)

      接着我们考虑特殊要求,即空格问题,因为数据末尾没有空格,所以我们不能在使用printf语句的时候就在%d的后面直接添加一个空格,否则最后肯定会有一个空格,为此我们应进行判断,如果输出是输出最后一位数字,我们不让其输出空格,其他情况则可,我们可以使用if选择语句来完成;

参考代码:

     for(i=1;i<counter;i++)

          y*=10;                      //这里是为了移位操作打基础;

    while(1)

    {

        x=num;

        printf("%d",x/y%10);

        y/=10;

        counter--;                 //输出最后一位的时候counter的值变成了0;条件不成立不打印空格,循环也应结束了,用break跳出循环;

        if(counter) 

          putchar(' ');

        else break;

    }

3.逆序输出数据

方法一:直接逆序输出每一位数字(还是需要运用'/'的移位功能,'%'的读取个位数据的功能)

代码如下:

while(num)

{

  printf("%d",num%10);

  num/=10;

}

方法二:构造一个逆序数,再输出

代码如下:

int a=0,b=0;

    while(num)

    {

        a=num%10;

        num/=10;

        b=b*10+a;

    }

    printf("%d",b);


注意事项:

  1. 如果我们省去对10取模操作,结果会出错;例如123,第一位输出1 没问问题,但是第二位呢,123/10得到12 如果没有对10取模操作,结果输出即为12,而这显然不是我们的意愿!

  2. 此程序我们对原始数据多次进行了不同操作,为避免不同操作数据之间的影响,我们应定义变量保存我们输入的数据,以便再次赋值使用!
    参考代码:


    #include<stdio.h>

    int main()

    {

        int x,counter=0,y=1,i=1,num;

        scanf("%d",&x);

        num=x;

        while(x)

        {

            x/=10;

              counter++;

           }

          printf("%d\n",counter);

          for(i=1;i<counter;i++)

          y*=10;

          while(1)

          {

            x=num;

            printf("%d",x/y%10);

            y/=10;

            counter--;

            if(counter) 

               putchar(' ');

            else break; 

          }

          putchar('\n');

          int a=0,b=0;

          while(num)

         {

              a=num%10;

              num/=10;

              b=b*10+a;

         }

           printf("%d",b);

           return 0;

     }

我是大一新生,接触编程时间不长,所以思路比较基础,可能不是最简便的,但我亦是在尽力了。

如有裨益,吾之幸也!愿与君一同成长~

点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论