程式設計入門C語言 數字特徵值

2021-08-21 09:47:20 字數 2046 閱讀 6672

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

這裡的計算可以用下面的**來表示:

數字數字

數字奇偶奇偶

偶奇奇奇

數字奇偶偶奇

偶奇偶奇

奇偶一致

二進位制位值

你的程式要讀入乙個非負整數,整數的範圍是[0,1000000],然後按照上述演算法計算出表示奇偶性的那個二進位制數字,輸出它對應的十進位制值。

輸入格式:

乙個非負整數,整數的範圍是[0,1000000]。

輸出格式:

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

輸入樣例:

輸出樣例:

時間限制:500ms記憶體限制:32000kb

首先明白解答本題的幾個關鍵點

1.整數的分解(數字與數字每乙個對應位如何提取)

2.判斷奇偶是否一致

3.二進位制如何轉化為十進位制數字

對應問題解決辦法:

1.數字的每一位提取:可以採用%10再/10的辦法。例如135,從右到左依次提取個位、十位、百位數字,對於個位數字5,只需要%10就可以(135%10=5);對於十位數字3,只需把135的個位5去掉,然後再用相同的方法(即%10)就可以,那麼如何去掉個位數字5呢?這裡就要用到/10,(135/10=13),13%10=3;同樣的,提取百位數字1也是這種辦法。

數字的每一位提取:由於是從個位開始依次進行編號,所以我們可以設定乙個變數count,每次提取數字的某一位後,count值也隨之加1。

2.可以採用%2根據得到的值進行判斷奇偶。

3.二進位制轉化為十進位制:權值*二進位制數值。由於權值是從右向左依次擴大二倍的,所以需要乙個變數value來儲存,並每次擴大2倍。

圖例如下:

對應**:

#define _crt_secure_no_warnings 1

#includeint main()

else

num2 += digit*value;

num /= 10;

value *= 2;

} printf("%d", num2);

return 0;

}

但是,上述**也有缺點-執行效率不高。那個if語句其實沒有必要把digit=0也算出來。digit=0時最後轉換成十進位制可以不參與運算,因為0乘以任何數字都為0

改進方案:if語句只需把奇偶一致(digit=1)的判斷出來即可

改進**:

#define _crt_secure_no_warnings 1

#includeint main()

x /= 10;

value *= 2;

} printf("%d", sum);

return 0;

}

還可以利用pow函式算出2的次冪。

#define _crt_secure_no_warnings 1

#include#include#includeint main()

else

ret = ret + digit*pow(2, cnt - 1);

num /= 10;

} printf("%d", ret);

system("pause");

return 0;

}

數字特徵值(C語言)

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

c語言 數字特徵值

數字特徵值 5分 題目內容 對數字求特徵值是常用的編碼演算法,奇偶特徵是一種簡單的特徵值。對於乙個整數,從個位開始對每一位數字編號,個位是1號,十位是2號,以此類推。這個整數在第n位上的數字記作x,如果x和n的奇偶性相同,則記下乙個1,否則記下乙個0。按照整數的順序把對應位的表示奇偶性的0和1都記錄...

C語言 數字特徵值

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