關於剔除 一個多位數中的偶數並從新輸出的問題

題目的大體意思是:編程

輸入一個正整數,把各位上爲偶數的數去除,剩餘的數按原來從高位到低位的順序組成一個新的數.數組

爲何寫這個題呢?
編碼

這幾天,老師給咱們佈置的做業之一就是這道題,由於咱們班尚未學數組,因此不少同窗感到比較困難,因此這裏主要講不用數組的方法。spa

一:首先,咱們要先來分析這個問題:blog

1:完成這個任務續要那些數據?io

2:怎麼獲取這些數據?變量

3:而後怎麼經過數據的處理來輸出要求結果。循環

(主要呢就是這三個問題,若是有漏掉的還請指出,以便進一筆完善。)float

答:程序

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
就到這裏,謝謝你們。
相關文章
相關標籤/搜索