C语言编程:一个数的各位数字倒过来所得到的新数叫原数的反序数.

一个数的各位数字倒过来所得到的新数叫原数的反序数.如果一个数等于它的反序数,则称它为对称数或回文数。求10000以内的二进制对称数
算法说明:先将正整数n的二进制字符形式放在字符数组1中,二进制字符形式的反序放在字符数组2中,然后,比较这两个字符串,若相等,则是二进制对称数

#include<string.h>
#include <stdio.h>
int comp(int i,char *a); /*判断是否是回文数的函数*/
int main(void)
{ int i,j=1;
char a[12];
for(i=0;i<10000;i++)
{ if(comp(i,a))
{ printf("%-4d:%-11s ",i,a);j++; } /*显示结果时,":"前面是10进制数,后面是对应的2进制数*/
if(!(j%5)) { j=1;printf("\n"); }; /*每五个数一行,使得显示更整齐*/
}
getch();
}
int comp(int i,char *a)
{ char b[12];
int j,k;
if(i==0) /*如果待判断的数为0,则返回1(0是回文数)*/
{ a[0]='0';a[1]='\0';
return 1;
}
for(j=0;i!=0;i/=2) b[j++]='0'+i%2;
/*将i依次除以2,每次得到的余数存入数组b中(这样得到的是逆序的2进制数)*/
b[j--]='\0'; /*字符串最后一位置为'\0'*/
for(k=0;j>=0;k++,j--) a[k]=b[j]; /*倒转b并存入a,得到正序的2进制数*/
a[k]='\0';
return !(strcmp(a,b)); /*返回两数组的比较结果*/
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-02
#include<stdio.h>
#include<string.h>

void change(long int n,char *a) //将十进制转换成二进制给数组a
{
long int i=0;
while(n)
{
a[i]=n%2+48;
n=n/2;
i++;
}
a[i]=0;
}

void copy(char *a,char *b) //倒置数组a给b
{
int n,i=0,j;
n=strlen(a);
while(n)
{
b[i++]=a[--n];
}
b[i]='\0';
}

void main()
{
long int n;
char a[20],b[20];
for(n=1;n<=10000;n++)
{
change(n,a);
copy(a,b);
if(!strcmp(a,b)) //比较数组a,b
printf("%ld\n",n);
}
}本回答被提问者采纳
第2个回答  2019-02-02
#include<stdio.h>
#include<string.h>
void
change(long
int
n,char
*a)
//将十进制转换成二进制给数组a
{
long
int
i=0;
while(n)
{
a[i]=n%2+48;
n=n/2;
i++;
}
a[i]=0;
}
void
copy(char
*a,char
*b)
//倒置数组a给b
{
int
n,i=0,j;
n=strlen(a);
while(n)
{
b[i++]=a[--n];
}
b[i]='\0';
}
void
main()
{
long
int
n;
char
a[20],b[20];
for(n=1;n<=10000;n++)
{
change(n,a);
copy(a,b);
if(!strcmp(a,b))
//比较数组a,b
printf("%ld\n",n);
}
}
第3个回答  2009-05-02
问题分析与算法设计
可设整数N的千、百、十、个位为i、j、k、l,其取值均为0~9,则满足关系式:
(i*103+j*102+10*k+l)*9=(l*103+k*102+10*j+i)
的i、j、k、l即构成N。

*程序说明与注释
#include<stdio.h>
int main()
{
int i;
for(i=1002;i<1111;i++) /*穷举四位数可能的值*/
if(i%10*1000+i/10%10*100+i/100%10*10+i/1000==i*9)
/*判断反序数是否是原整数的9倍*/
printf("The number satisfied stats condition is: %d\n",i);
/*若是则输出*/
}

C语言编程:一个数的各位数字倒过来所得到的新数叫原数的反序数.
int main(void){ int i,j=1;char a[12];for(i=0;i<10000;i++){ if(comp(i,a)){ printf("%-4d:%-11s ",i,a);j++; } \/*显示结果时,":"前面是10进制数,后面是对应的2进制数*\/ if(!(j%5)) { j=1;printf("\\n"); }; \/*每五个数一行,使得显示更整齐*\/ } getc...

C语言编程题
C语言编写,VC编译通过:include<stdio.h>#include<conio.h>#include<stdlib.h>\/*问题:将一个数的数码倒过来所得的新数叫原数的反序数,如果一个数等于他的反序数,则称为它的对称数,计算不超过1993的最大的二进制的对称数.*\/int getlength(int maxnum)\/\/返回十进制转二进制后的位数{int i=...

把一个数的各位数字颠倒过来,所得的新数与原数互为反序数……
原数与反序数分别为791与197,所以它们的和为791+197=988

将一个四位数的数字顺序颠倒过来
将一个四位数的数字顺序颠倒过来,得到一个新的四位数(这个数也叫原数的反序数),新数比原数大8802.则原来的四位数是1099。详情解释:设原四位数为a,b,c,d.(a,b,c,d为0-9的整数,a≠0),d必定大于a,且a和d均不为0,千位数相减;因为d-a=7不成立,因为,个位数相减10+a-...

...过来,得到一个新的四位数,这个数也叫原数的反序数,新的数字,比原来...
令原数为 abcd,则abcd+8532=dcba,那么a+8=d且不产生进位,所以a=1,d=9;则变为1bc9+8532=9cb1,那么有c+4=b+10*n,b+5+n=c(n为十位上的进位,没有进位则n=0),联立两式得到n=1,于是得到b+6=c,由于c在0到9的整数取值,因此c=6,7,8,9;b=0,1,2,3。

反序数是什么意思
简单地说,反序数是指在一个排列组合中,按照相反的顺序重新排列数字或元素后得到的新的排列组合。这种排列方式的特点是原本数列的顺序发生了倒转变化。举例来说,假设我们有一个数字序列如“从大到小或从小到大的排序后重新排列的顺序即为反序数。这样理解有助于我们更直观地把握反序数的概念。在反序...

...得到一个新的四位数,( 这个数也叫原数的反序数 ),新数比原数大8802...
设原数为:a*1000+b*100+c*10+d 颠倒过来后为:d*1000+c*100+b*10+a 因新数比原数大8802,显然d比a大,故10+a-d=2,即d-a=8.……之后类推即可。。

C语言编程问题:输入一个10进制整数,各个倍数逆序后组成一个新的数...
例如你输入的数字是123,先对这个数求对10的余数,即123%10=3,这个数的个位数已经对我们没用了可以直接去掉123\/10=12,123后一位的逆序为3;再求余数12%10=2,再去掉末位数12\/10=1,后两位数的逆序为3*10+2=32;再求余数1%10=1,再去掉末尾数1\/10=0,后三位的末位数为32*10+1=321...

C语言:用TC编程:将一个字符串中的所有字符按相反的次序重新放置
{ \/*让字符串中的头一个字符与最后一个字符交换*\/ temp=str[i];str[i]=str[j];str[j]=temp;} printf("\\n反序后的字符串为:\\n");for (i=0;str[i]!='\\0';i++) \/\/利用循环输出反序后的字符串 printf("%c",str[i]);printf("\\n");} 明白了吗?朋友!复制下来试一试!

一组排列的反序数反着排的到徐水
首先,一位数的反序数就是他本身吧,所以1~9 就是有了9个(如果算上0的话就十个)其次,两位数的,11,22,33,44,55···99 由此可见,也是有9个 再次,三位数的,101,111,121,131,141···191 这样的类型有10个 而再类推到9x9,所以一共有9*10=90个 接着,四位数的,1xx1 这个,中间的xx...

相似回答