这题的要求是这样的:
这题我没做出来,我大概思路是这样的,根据输入的数字,把这个数字的每一位都分离出来,然后判断奇数还是偶数,再判断序是奇数还是偶数,最后两个奇偶性比较,输出1还是0,这个输出的1和0该怎么保存,以及最后怎么转化为十进制呢? 卡住了。
2018.9.17更新
最近又想了一下,做出来了。
int main()
{
int input = 0;//用户输入的数字
int digit = 0;//每次循环提取出的数字
int n = 1;//第几位数了
int sum = 0;//结果
int r = 1;//二进制位的权重
int c = 0;//对应的二进制字符
scanf_s("%d",&input);
while (input!=0)
{
//提取出最某位的数字
digit = input % 10;
//奇数+奇数=偶数
//偶数+偶数=偶数
//奇数+偶数=奇数
//当数字和序号奇偶性相同的时候,它们的和一定是偶数,偶数一定能除开2
if ((digit + n) % 2 == 0)
{
c = 1;//生成对应的二进制数字
}
else
{
c = 0;//生成对应的二进制数字
}
//计算权重
r = r * 2;//每循环一次二进制数字的权重就是2的n次方
//修正权重,觉得这里的代码挺丑陋的,但是又不知道该怎么改。
if (n == 1)//当第一次循环的时候权重应该是1,但这里是2,所以修正一下权重的值。
{
r = 1;
}
//计算特征值
sum = sum + c * r;
//准备提取下一个数字
n++;
//去掉个位之后形成的新数字
input = input / 10;
}
printf("%d",sum);
return 1;
}