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語言實現啊 求大神指導
轉成字元串,遍歷數組比較,前後位是否相同