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需要被排除在外,因为它仅有一位数且为偶数。