大家好,我是一童,今天本来要用蔡勒公式写万年历,但蔡勒公式有点不熟悉,还需要在研究研究,所以今天分享一下关于进制的实例
- 判断整数n的d进制数是否为回文数
#include<stdio.h>//判断n的d进制数是否为回文数
int Circle(int n,int d)
{
int m=n,s=0;
while(m)
{
s=s*d+m%d;
m/=d;
}
return s==n;//返回判断
}
void main()
{
int num[]={131,55,23};
int scale[]={10,2,16};
int i,j;
printf("数值n 进制d\n");
for(i=0;i<sizeof(num)/sizeof(num[0]);i++)
for(j=0;j<sizeof(scale)/sizeof(scale[0]);j++)
if(Circle(num[i],scale[j]))
printf("%d--(%d) 是回文数!\n",num[i],scale[j]);
else
printf("%d--(%d) 不是回文数!\n",num[i],scale[j]);
printf("\n");
}
- 任意10进制数的转换为其他进制数
# include<stdio.h>//任意10进制数的转换为其他进制数
# define M sizeof(unsigned int)*8
int Trans(unsigned n,int d,char s[])//将无符号整数n译成d(2<=d<=16)进制的数
{
static char digits[]="0123456789ABCDEF";
char buf[M+1];
int j,i=M;
if(d<2||d>16)
{
return 0;
}
buf[i]='\0';//第一个字符为空
do{
buf[--i]=digits[n%d];//取值然后赋值(--i表示逆序)
n/=d;
}while(n);//直到n取0
for(j=0;(s[j]=buf[i])!='\0';i++,j++);//将buf[i]数组中的元素全部赋给s[j]
return j;
}
void main()
{
unsigned int num=235;
int scale[]={2,3,10,16,1};//进制数
char str[33];
int i;
for(i=0;i<sizeof(scale)/sizeof(scale[0]);i++)
{
if(Trans(num,scale[i],str))
printf("%5d=%s(%d)\n",num,str,scale[i]);
else
printf("%5d=>(%d) Error!\n)",num,scale[i]);
}
}
好了,今天先分享这些,欢迎下方留言!!!