1,好數
一個整數如果按從低位到高位的順序,奇數位 (個位、百位、萬位????) 上的數字是奇數,偶數位 (十位、千位、十萬位????) 上的數字是偶數,我們就稱之為 “好數”。
給定一個正整數?NN,請計算從 1 到?NN?一共有多少個好數。
法一:用position作為索引,用來表示當前位為偶數位還是奇數位。
#include <stdio.h>
#include <stdlib.h>_Bool isgoodnum(int x){int position=1;if(x==0){return 0;}while(x>0){int digit=x%10;if(position%2==1){if(digit%2!=1){return 0;}}else{if(digit%2!=0){return 0;}}x/=10;position++;}return 1;
}int main(int argc, char *argv[])
{// 請在此輸入您的代碼int n=0,ans=0;scanf("%d",&n);for(int i=0;i<=n;i++){if(isgoodnum(i)){ans++;}}printf("%d",ans);return 0;
}
法二:利用一個數為偶數(奇數)則個位數一定為偶數(奇數)的性質?,可以不用單獨獲取? ? ? ? ? ? ?每一位數,只需要每次去除末位數即可。
#include <stdio.h>
#include <stdlib.h>_Bool isgoodnum(int x){if(x==0){return 0;}while(x>0){if(x%2!=1){return 0;}else{x/=10;if(x%2!=0){return 0;}else{x/=10;}}}return 1;
}int main(int argc, char *argv[])
{// 請在此輸入您的代碼int n=0,ans=0;scanf("%d",&n);for(int i=0;i<=n;i++){if(isgoodnum(i)){ans++;}}printf("%d",ans);return 0;
}
注:0需要被排除在外,因為它僅有一位數且為偶數。?