翁愷老師C語言入門第三周編程題之《數字特征值》


題目內容:

對數字求特征值是常用的編碼算法,奇偶特征是一種簡單的特征值。對於一個整數,從個位開始對每一位數字編號,個位是1號,十位是2號,以此類推。這個整數在第n位上的數字記作x,如果x和n的奇偶性相同,則記下一個1,否則記下一個0。按照整數的順序把對應位的表示奇偶性的0和1都記錄下來,就形成了一個二進制數字。比如,對於342315,這個二進制數字就是001101。

這里的計算可以用下面的表格來表示:

數字

3

4

2

3

1

5

數位

6

5

4

3

2

1

數字奇偶

數位奇偶

奇偶一致

0

0

1

1

0

1

二進制位值

32

16

8

4

2

1

按照二進制位值將1的位的位值加起來就得到了結果13。

你的程序要讀入一個非負整數,整數的范圍是[0,100000],然后按照上述算法計算出表示奇偶性的那個二進制數字,輸出它對應的十進制值。

輸入格式:

一個非負整數,整數的范圍是[0,100000]。

輸出格式:

一個整數,表示計算結果。

輸入樣例:

342315

輸出樣例:

13

本人的滿分通過答案,寫在此方便以后查看

#include <stdio.h>
#include <math.h>
int main(){
    int num;
    int count=0;
    int a=0;
    int dig=0;
    scanf("%d",&num);
    do{
        count ++;
        a=num%10;
        if((a+count)%2==0){
            dig=dig+pow(2,count-1);
        }
        num /=10;
    }while(num>0);
    printf("%d",dig);
    return 0;
}

PS:數字奇偶和數位奇偶比較異同,等價於求兩數之和是否為偶數。

這是我獨自誤打誤撞想到的,以為別人都是這么想,后來翻看討論區,發現不少人是先兩個數都單一判斷,最后再來個綜合判斷,那樣挺麻煩的。而且網友ikeltis早於我想到此思路,發到談論區還受到了翁老師的微博表揚,想到自己也是獨立思考想到的此法子,莫名的感到了一些鼓舞,哈哈,留此文紀念下。

附上網友ikeltis的代碼(未征得同意,見諒)
/*
*思路:數字奇偶和數位奇偶相同時記為1,等價於數字與數位之和為偶數時記為1 *不知道 C 語言的指數怎么求,就用 h 做了累乘 */ #include<stdio.h> int main() { int n=1; int h=1; int num; int flag=0; scanf("%d",&num); while(num != 0) { if((num+n)%2==0) { flag = flag + h; } n++; num = num / 10;//刪去最后一位數 h=h*2; } printf("%d\n",flag); return 0; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM