int i,j,maxx;//這裏默認int變量上限為2^31-1,如有需要可以把int改為long
for (maxx=1;maxx<x;maxx*=10);
maxx/=10;//為後面截取最高位做準備
while (x>=10){//進行循環檢測這個整數的最高位和最低位,直至只剩中間壹位或不剩
i=x/maxx;//截取整數最高位
j=x%10;//截取整數最低位
if(i!=j) break;
x%=maxx;x/=10;//整數刪去最高位最低位
maxx/=100;//為後面截取最高位做準備
}
return (x<10);//若x<10,則該數滿足要求是回文數
}
對LZ的程序做壹個評價吧:
首先,只有壹位的數字是回文數。
而且,按LZ的程序看,像12341這樣的數字也可以被判斷成回文數,只有兩邊數字完全不壹樣的數才不是回文數。而且k沒有賦初值。
建議刪去if(n==1)這個條件句
另外,把逐壹比較的for語句修改如下:
for(i=0,j=n-1,k=1;i<j;i++,j--)//k賦初值1,兩邊不需要重復比較兩次,所以修改成i<j
{
if(A[i]!=A[j])//只要有壹對數位不符合條件它就不是回文數
k=0;
}
我的程序第二行為什麽會看不懂?……只是對局部變量的聲明而已,是範圍沒弄明白?範圍可以無視。。
另外,LZ說的不能用數組和指針,我被迫這麽寫。。
希望能給妳幫助
妳忘了壹件最最重要的事:A數組沒有計算!(但是是妳說不能用數組指針啊)
將
while(s>0)
{
s=s/10.0;
n++;/*得到n的值為A的位數*/
}
改為
while (s>0)
{a[n]=s%10;s/=10;/*其實得到的序列是這個數字倒過來的序列,但是回文數倒著判斷還是回文數,所以無所謂*/
n++;/*得到n的值為A的位數*/
}
另外說明壹下,我為了計算機競賽從初壹就開始學C了,現在上高壹,有什麽問題可以找我,我盡量幫忙