关于剔除 一个多位数中的偶数并重新输出的问题

题目的大致意思是:

输入一个正整数,把各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数.

为什么写这个题呢?

这几天,老师给我们布置的作业之一就是这道题,因为我们班还没有学数组,所以很多同学感到比较困难,所以这里主要讲不用数组的方法。

一:首先,我们要先来分析这个问题:

1:完成这个任务需要那些数据?

2:怎么获取这些数据?

3:然后怎么通过数据的处理来输出要求结果。

(主要呢就是这三个问题,如果有漏掉的还请指出,以便进一步完善。)

答:

1:我们要获取那些位是奇数,那些不是,

即:共有多少位奇数。

2:通过if语句判断某位除以二的余数是不是0,进而得以判断是不是偶数。

(当然,分离各位还是个问题,文章后面会插个地方讲一下。)

3:怎么处理数据呢,因为我们要输出重组的新数,我们可以真正的把它变成一个多位数在输出,也可以一个一个的输出,中间只要没空格就行呗。(不过顺序就是个问题了,当然用数组就可以完美解决)😀

OK现在问题分析完毕。

二:总体来看一下我们需要那几部分编码。(因为有多重方法,讲一下其中比较麻烦的一种方法,其他几种方法后面会集中在进行概述。当然只是为了让大家加深对编程的理解与运用,不过实际上机考试之类的还是要取最简单的方法。)

先看有多少位奇数(主要就是分离各位)

1:先大概说一下分离各位,(当然会的就可以直接跳过,往下看了)

通过某数对十求余,可得最后一位,然后该数除十在循环往复,当然如果出十之后为零了,就不用继续了。

OK,现在编码求多少位奇数的语句

 do
    {
        s=a%10;
        if(s%2!=0)
        sum++;
        a=a/10;
    } while (a>0);
(直截取了求奇数个数的一部分,在加一点注意事项:本体所用到的变量全是int型)
全程序配截图
 
 

中间是程序内容,下面是试运行及输出结果。

 

 

 。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OK,下一步。

2:第二部有点麻烦,需要在具体解释一下:

直接输出的话会倒序,所以要做别的处理。

所以我们要用别的方法,我先说一种比较麻烦的

:我们说要输出的数呢,是一个整数,可以理解最后一位*10的零次幂,倒数第二位*10的一次幂·····。

所以,有了方法,就要看怎么编码::

以奇数的位数为判断标准,分别判断各个位数,并把奇数为分别乘以10的依次次幂,然后求和,加完后跳出,并输出所求之和,即为要求值。

现在编码。

这里就不发部分编码了,把上面的合并了,一块发出来

#include<stdio.h>
int main()
{
    int a, s, d, f = 0, t = 0, u = 1;
    int sum = 0, sum2 = 0;
    scanf("%d", &a);
    int q = a;
    do
    {
        s = a % 10;
        if (s % 2 != 0)
            sum++;
        a = a / 10;
    }
    while (a > 0);
    do
    {
        d = q % 10;
        q /= 10;
        if (d % 2 == 1)
        {
            t = d * u;
            f += t;
            u = u * 10;
            sum2++;
        }
    }
    while (sum2 != sum);
    printf("%d\n", f);

    return 0;

}
此为标准编码。
当然,变量的定义不是太规范。
还是可以看懂的。
OK,任务完成。
当然,还可以在判断的时候就开始求和,并通过判断原数是否为零决定是否结束循环。
现在,结束了。完成编写。
然后呢,希望大家看到有什么不对的地方可以予以指正。希望大家可以吧后面的那个一个循环解决问题的代码敲一下。就当锻炼自己的手速了😉OK
就到这里,谢谢大家。
最后补充一下,因为问题还有一种更简单的方法,我会再写一个博客进行解析。
不过初学者,还是要先把本篇理解了再去看。
后续内容近期就会发布至主页。

 

 

 

 

 

 

posted @ 2019-11-06 22:58  Mr小明同学  阅读(727)  评论(0编辑  收藏  举报