c语言实践 数字特征值
这题的要求是这样的:
这题我没做出来,我大概思路是这样的,根据输入的数字,把这个数字的每一位都分离出来,然后判断奇数还是偶数,再判断序是奇数还是偶数,最后两个奇偶性比较,输出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; }