翁恺老师C语言入门第三周编程题之《数字特征值》

题目内容:

对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。

这里的计算可以用下面的表格来表示:

数字

3

4

2

3

1

5

数位

6

5

4

3

2

1

数字奇偶

数位奇偶

奇偶一致

0

0

1

1

0

1

二进制位值

32

16

8

4

2

1

按照二进制位值将1的位的位值加起来就得到了结果13。

你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

输入格式:

一个非负整数,整数的范围是[0,100000]。

输出格式:

一个整数,表示计算结果。

输入样例:

342315

输出样例:

13

本人的满分通过答案,写在此方便以后查看

#include <stdio.h>
#include <math.h>
int main(){
    int num;
    int count=0;
    int a=0;
    int dig=0;
    scanf("%d",&num);
    do{
        count ++;
        a=num%10;
        if((a+count)%2==0){
            dig=dig+pow(2,count-1);
        }
        num /=10;
    }while(num>0);
    printf("%d",dig);
    return 0;
}

PS:数字奇偶和数位奇偶比较异同,等价于求两数之和是否为偶数。

这是我独自误打误撞想到的,以为别人都是这么想,后来翻看讨论区,发现不少人是先两个数都单一判断,最后再来个综合判断,那样挺麻烦的。而且网友ikeltis早于我想到此思路,发到谈论区还受到了翁老师的微博表扬,想到自己也是独立思考想到的此法子,莫名的感到了一些鼓舞,哈哈,留此文纪念下。

附上网友ikeltis的代码(未征得同意,见谅)
/*
*思路:数字奇偶和数位奇偶相同时记为1,等价于数字与数位之和为偶数时记为1 *不知道 C 语言的指数怎么求,就用 h 做了累乘 */ #include<stdio.h> int main() { int n=1; int h=1; int num; int flag=0; scanf("%d",&num); while(num != 0) { if((num+n)%2==0) { flag = flag + h; } n++; num = num / 10;//删去最后一位数 h=h*2; } printf("%d\n",flag); return 0; }

 

posted @ 2014-12-27 01:02  berryfad  阅读(14513)  评论(1编辑  收藏  举报