理解:取得整数的数字可以用对10取余一个一个的计算;而数位可以在循环中累加一次一次的得到。
代码1:
#include<stdio.h>
int main()
{
int count = 0;//移位计数,用来表示数位(1,2,3,4,5,6)
int temp;
int num;//输入的数字
int sum = 0;//求和
int kp;
scanf("%d",&num);
while(num>0){
temp = num%10;//取出最后一位
num /= 10;//减去最后一位之后的数
count++;//移位一次就加一次
int t = count;//用来接收移位,方便之后进行二进制求和
int a = 1;
if(temp%2 == count%2) {//用来判断是不是同时是奇数或者偶数,如果是kp=1
kp = 1;
}
else{//两者不同时为奇数或者偶数,kp=0
kp = 0;
}
for(;t>1;t--){//求出该位置在二进制中表示多少
a = a*2;//循环结束得到这个二进制值
}
sum = sum + a*kp;//求和计算
}
printf("%d\n",sum);
return 0;
}
代码2:
#include<stdio.h>
int main()
{
int sum=0;
int count=0;
int n;
int temp;
int ans=1;
scanf("%d",&n);
while(n>0){
temp=n%10;//取得最后一位数字
count++;//移位一次加一次
if(temp%2 == count%2){//判断两者是否同时为奇数或者偶数
sum += ans;//如果两者同时为奇数或者偶数,求和值sum加上该位置二进制*2的数
}
ans = ans*2;//该位置二进制表示的数
n /= 10;//减去最后一位数字之后的整数
}
printf("%d",sum);
return 0;
}