A. 编程c语言程序,输入一个五位数,判断是否为对称说,如:12321,20202都是对称数
供参考……
#include "stdio.h"//
void main(void){
int nDec;
printf("请输入一个十进制五位整数...\nnDec=");
for(;;){
scanf("%d",&nDec);
if(nDec>9999 && nDec<100000) break;
printf("错了!请输入10000~99999间的整数...\nnDec=");
}
printf("%d",nDec);
if((nDec%10000)/1000!=(nDec%100)/10 || nDec/10000!=nDec%10) printf("不");
printf("是对称数!\n");
}
B. c语言对称数252程序怎么设计
大致的思路是把这是数最低位变成最高位最高位变成最低位
就这样变换
变形后的数字和原来的数相等就是对称数了。
例子:判断252是不是对称数
#include<stdio.h>
intmain(void)
{
intn1=252;
intn=n1;
intan=0;
inti;
while(n){
i=n%10;
n=n-i;
n/=10;
an*=10;
an+=i;
}
if(an==n1){
printf("%d是对称数字",n1);
}else{
printf("%d不是对称数字",n1);
}
}
这个问题是算法有点绕了。 了解这个问题的算法 和程序的执行顺序用的你大脑运行一遍这个程序你就会明白了。 这个方法对00012321 这样的前面有0的数字组合不适用
C. C语言 判断是否为对称数的代码 哪里错了
数值超出int长度, 把for循环中的int换成long即可
scanf中要写%ld
int k;
scanf("%d",&k);//设置一个K值 循环K次
for(long m=0;m<k;m++)
{
long n,j=0;
scanf("%ld",&n);
long newdata=n;//设置newdata方便与最终数据比对是否相同
while(n)
{
j=j*10+n%10;
n=n/10;
}
if(j==newdata)
{
printf("YES ");
}
else
{
printf("NO ");
}
}
D. C语言:判断一个四位数是不是对称数
if(x%10000/1000==x%10&&x%1000/100==x%100/10)printf("是对称数 ");
elseprintf("不是对称数 ");
E. C语言判断一个整数是否为对称数
main()
{long int x,y,a,b,c=0,n;
int i;
scanf("%ld",&x);
y=0;
a=b=n=x;
while(n!=0)
{n=n/10;
y++;
}
y=y/2;
for(i=1;i<=y;i++)
a=a/10;
for(i=1;i<=y;i++)
{c=c*10+b%10;
b=b/10;
}
if (a==b) printf("yes\n") ;
else printf("NO\n");
}
思想就是将整数分成2半,后一半倒序,然后判断是否相等,例如52125 :前一半为52,后一半为25,倒序为52,与前一半相等,为对称数^_^
F. 用C语言编译:输入一个数,编译判断它是否为对称数(用for循环语句来做)
#include <stdio.h>
int main(void)
{
int i = 0, j;
int num, num1;
int buf[128];
int flag = 1;
printf("input a integer:");
scanf("%d", &num);
num1 = num;
while (num)
{
buf[i++] = num % 10;
num /= 10;
}
for (j = 0; j < i / 2; j++)
{
if (buf[j] != buf[i - 1 -j])
{
flag = 0;
break;
}
}
if (flag) printf("%d 是对称数\n", num1);
else printf("%d 不是对称数\n", num1);
return 0;
}
G. C语言,输入一个int型数据,判断这个数是不是对称的。
用sprintf是可以的,代码如下:
#include<stdio.h>
#include<stdlib.h>
intIsSymmetric(intnum)
{
inti,n=0,tmp=num;
while(tmp)
{
tmp=tmp/10;
n++;
}
char*buf=(char*)malloc(n+1);
sprintf(buf,"%d",num);
for(i=0;i<n/2;i++)
{
if(buf[i]!=buf[n-i-1])return0;
}
return1;
}
intmain()
{
intnum=-1;
while(num<0)
{
printf("请输入一个非负整数: ");
scanf("%d",&num);
}
if(IsSymmetric(num))
printf("%d是对称数 ",num);
else
printf("%d不是对称数 ",num);
}
也可以用以下方法:
intIsSymmetric(intnum)
{
intreverse_of_num=0,n=0,tmp=num;
while(tmp)
{
reverse_of_num=reverse_of_num*10+tmp%10;
tmp=tmp/10;
}
if(reverse_of_num==num)return1;
elsereturn0;
}
H. c语言程序设计--对称数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[10]={0};
int a,b, num,i,j;
gets(str);
num=strlen(str);
a=atoi(str);
if(num%2==0)
{
if(str[num/2-1]<str[num/2])//未考虑str[num/2-1]==str[num/2]的情况,比如2443
str[num/2-1]=str[num/2-1]+1;
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i]; //2443算出来变2442,错误
}
if(str[num/2-1]<str[num/2])
//str[num/2]=str[num/2]+1;
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i];
}
}
if(num%2!=0)
{
str[num/2]=str[num/2]+1; //不需要上来就+1,未必有这个必要,
//比如231,应是232,不是242
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i];
}
}
b=atoi(str);
printf("%d,%d,%d\n",a,b,b-a);
return 0;
}
===============================================
按照你的算法,我写了个实现:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[10]={0};
int a,b, num,i,j;
int index;
do{
gets(str);
num=strlen(str); //如果直接输入回车,str是空字符串,下面的计算无法进行
}while(num==0);
a=atoi(str);
index=num/2-1;
/*找出离数字“中心”最近的第一个不对称的位置*/
while(index>=0 && str[index]==str[num-index-1])
{
index--;
}
if(index>=0)
{
if(str[index]<str[num-index-1])
{
int index2=num/2;
/*如果是9,不能再累加了,必须往高位找*/
while(str[index2]=='9')
{
index2--;
}
/*由于str[index]<str[num-index-1]<='9'
* 所以index2肯定能找到,不会出现index2<0的情形
*/
str[index2]=str[index2]+1;
str[num-index2-1]=str[index2];
/*高位累加后,中间位置可以清零,数会比较小*/
for(i=index2+1; i<num-index2-1; ++i){
str[i]='0';
}
}
for(i=0,j=num-1; i<=index; i++,j--)
{
str[j]=str[i];
}
}
b=atoi(str);
printf("%d,%d,%d\n",a,b,b-a);
return 0;
}
I. c语言,判断一个数是否为对称数哪里出错了
我运行了之后没有错阿,上面是我的运行结果
J. 判断一个数是否为对称数如1234.321 如何用c语言实现啊 求大神指导
转成字符串,遍历数组比较,前后位是否相同