#include <stdioh>
#include <stringh>
//构造位运算结构
//目的是减少内存占用
//由于数据是五位数,所以按照位 *** 作100000/8=12500,所以对应于12500即可
char bit[12501];//用于记录数据,用bit来进行记录,1代表之前测试过这个数,但不一定输出过
char bitPrintf[12501];//1代表以及输出
char bitCurr[12501];//代表本次扩展访问的数的标注
//设置bitCurr中的对应的位
void setcbit(long t)//纪录t位
{
bitCurr[t>>3]|=(0x01<<(t&0x07));
}
//取得bitCurr标记中的对应t的那位状态
int getcbit(long t)
{
int arrindex=t>>3;
int ch=0x01<<(t&0x07);
if(bitCurr[arrindex]&(ch))//这是取得t/8对应的char 的第t%8位数据
return 1;
else
return 0;
}
//设置bitPrint中的对应的位
void setbit(long t)//纪录t位
{
bit[t>>3]|=(0x01<<(t&0x07));
}
//取得标记中的对应t的那位状态
int getbit(long t)
{
int arrindex=t>>3;
int ch=0x01<<(t&0x07);
if(bit[arrindex]&(ch))//这是取得t/8对应的char 的第t%8位数据
return 1;
else
return 0;
}
void setpbit(long t)//纪录t位
{
bitPrintf[t>>3]|=(0x01<<(t&0x07));
}
//取得标记中的对应t的那位状态
int getpbit(long t)
{
int arrindex=t>>3;
int ch=0x01<<(t&0x07);
if(bitPrintf[arrindex]&(ch))//这是取得t/8对应的char 的第t%8位数据
return 1;
else
return 0;
}
//函数对num所能排列成的任何数据进行标记
//如若已经出现过,则返回0,否则返回1
int setFlag(long num)
{
return 1;
}
//排序,对分离的五位数字进行排序
void sort(int b)
{
int t;
for(int i=0;i<5;i++)
{
for(int j=i+1;j<5;j++)
{
if(b[i]<b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
}
/---------------------------
根据当前的数据t,得到下一个数据
----------------------------/
long getNextNumber(long t)
{
int b[5];
for(int i=0;i<5;i++)
{
b[i]=t%10;
t/=10;
}
sort(b);
long maxNum=b[0]10000+b[1]1000+b[2]100+b[3]10+b[4];
long minNum=b[4]10000+b[3]1000+b[2]100+b[1]10+b[0];
return maxNum-minNum;
}
//通过给定的一个数,可以搜索所有可以生成的数,并判断是否进入了五位圈
void findCyle(long t)
{
memset(bitCurr,0,sizeof(bitCurr));
while(getbit(t)==0)//找到下一个数
{
setbit(t);
setcbit(t);
t=getNextNumber(t);
}
if(getcbit(t)==1 && getpbit(t)==0)//这次访问,还没输出过,进入循环判断输出阶段
{
setpbit(t);
printf("[%ld",t);
while(1)//找到下一个数
{
t=getNextNumber(t);
if(getpbit(t)==0)
{
setpbit(t);
printf(",%ld",t);
}
else
{
printf("]\n");
break;
}
}
}
}
int main()
{
memset(bit,0,sizeof(bit));//清空数据
//考虑到时间复杂度,对特殊数据进行了特殊处理
setpbit(11111);
setpbit(22222);
setpbit(33333);
setpbit(44444);
setpbit(55555);
setpbit(66666);
setpbit(77777);
setpbit(88888);
setpbit(99999);
setbit(11111);
setbit(22222);
setbit(33333);
setbit(44444);
setbit(55555);
setbit(66666);
setbit(77777);
setbit(88888);
setbit(99999);
//设置形同的数不进行判断
//printf("%ld\n",getNextNumber(82962));
printf("[0]\n");
for(long i=10000;i<100000;i++)
{
if(getbit(i)==0)//表明这个数还没进入任何一个圈,要进行判断
{
findCyle(i);
}
}
return 1;
}
void convert(char c)
{
char result[8]={0};
for(int i=0;i<8;i++)
result[i]=c&(0x01<<i);
}
实参类型不对, 函数 int byte8_to_bit64(char ch[8], char bit[64]):形参类型是 char ,解决方法如下:
1、首先C语言编程软件中,右击项目文件,选择属性,在打开的属性页面中,选择“链接器”。
2、然后在右边栏中,找到并点击“子符”,如下图所示。
3、然后更改上图红色框内容为下图选项。
4、修改完成后,单击确定即可,如下图所示。
5、再次编译,此类错误就不会出现了。
#include<stdioh>
#include<stringh>
int main(){
char c[字符串长度];
int len=strlen(c);
c[len-1]='0';
return 0;
}
char 是计算机编程语言中可容纳单个字符的一种基本数据类型。
它占用1个字节,即8个bit, 数值范围二进制从00000000 ~ 11111111,
即十进制的0~255,它可以被用来对应acsii码,
即所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。
在你的例子中,
getchar()方法从终端输入一个字符赋值给QW,
然后ER在QW的基础上加上31,变成另一个字符。
TY也在QW的基础上加上33,变成另一个字符。
QW再在QW的基础上加上32,变成另一个字符。
因为QW, ER,TY的数值都相差1,所以它们输出的结果是3个相邻的ascii字符。
请采纳,谢谢
第一个是在主程序中设置的定时计数器中断相关参数设置,TMOD=0x10:设置定时计数器的工作方式为方式1(16为计数器),也就是计数范围为(0-65536)。TH1=(65536-200)/256;:TL1=(65536-200)%256;设置计数器的初值为:200 EA=1;开总中断, ET1=1;开定时计数器1;TR1=1;定时计数器启动。第二个是中断服务程序,TH1=(65536-200)/256; TL1=(65536-200)%256;这两行是从新装入初值。 CLK=~CLK;CLK变量取反。
1个字节,8位
顺便说一下
int在不同的编译器中占用的位数不一样
在tc中占用2个字节也就是16位
在VC中占用4个字节也就是32位
亲爱的LZ,如果我的回答能够帮你解决问题,或是对你有帮助,或是对你今后的发展造成积极的影响,那么请您采纳我的回答吧,同时更迫切地希望您能够在采纳的时候帮我打上“能解决”和“原创”,然后把两行的五颗五角星分别点亮,点亮五角星就是点亮你我的希望。 我冲11级了,需要很多综合声望,感谢您的帮助,衷心祝愿您快乐每一天~
有没有必要这样写暂不说,学手时怎么写都可以,只要正确。你这里有个隐形错误:C++中cin >>是自动判断变量类型的,a声明的是char型,那么cin >> a;中a接收的是”字符“而不是“数”,即当你输入1时,a=0x31而并不是a=1,所以后面算法就都错误了。
以上就是关于任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,全部的内容,包括:任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,、如何把一个char型一个字节的数据转化为8个bit位的0~1,c语言实现怎么实现、为什么C语言中byte8_ to_ bit64会编译错误等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)