欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

判断数的位数,奇偶,二进制转十进制 c语言

程序员文章站 2022-03-08 15:52:29
...

  • 级联判断大于时,从高处网下走比如:

     if(num>999){}   //4位数

     else if(num>99){}    //3位数

     else if(num>9){}    //2位数

     else{}   //1位数

  • //测试数据不可大于10位,因为int的表达数范围有限,会溢出

scanf("%ld",&num);

cnt++;

num/=10;    //否则数字0会出错

while(num>0)
 {

 cnt++;

 num/=10;

 }

printf("%d",cnt);    

【题目】

题目内容:

对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是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


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


提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。


输入格式:

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


输出格式:

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


输入样例:

342315


输出样例:

13

#include <iostream>
#include <stdio.h> 
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	int num,result,tmp1,tmp2;  //输入,结果,临时
	int dig=1;                 //位数 
	int bin[20];               //二进制数 

	scanf("%d",&num);
	if(num==0) result=0;      //特殊情况 
	
	while(num>0)
	{
		tmp1=num%10;         //最低位 
		tmp1%=2;             //判断奇偶 
		tmp2=dig%2;
		//相同取1,不相同取0
		if(tmp1==tmp2) bin[dig-1]=1;       
		else bin[dig-1]=0;
		//从低到高 
		num/=10;
		dig++;
	}
	//注意循环结束后dig多1 
	for(dig--;dig>0;dig--)
	result=result+bin[dig-1]*pow(2,dig-1);      //二进制转化为十进制
	
	printf("%d",result);
	return 0;
}