2013-04-27 74 views
2

我已經創建了下面的代碼:爲什麼Matlab沒有返回迴文數字?

A = [0:1:999].*[0:1:999]'; 
B = mat2str(A); 
B(B == fliplr([B])) 

並且希望它由迴文數(同一向前和向後例如99,101,97479等)進行篩選。我得到的數字不是迴文,我的代碼有什麼問題?

+0

首先,你的代碼不會運行(它不會因爲它的尺寸不匹配錯誤的第一行) – 2013-04-27 05:24:50

+0

也許OP正在運行,在八度?倍頻會將正交向量擴展到二維陣列,因此第1行將產生一個1000乘1000的陣列。 – 2013-04-27 10:03:31

回答

3

試試這個:

A = [0:1:999].*[0:1:999]; 
B = str2num(fliplr(num2str(A')))'; 
palNums = A(A == B); 

palNums應該只包含迴文數了。

+1

+1我們應該包括一個解釋:OP的代碼不工作的原因是'mat2str'會將大的二維數組轉換爲一個單獨的長字符串(包含Matlab表達式來重現該數組)。你真正想要的是產生一個相應的字符串數組,然後分別翻轉字符串。 'num2str'這樣做是因爲當在一個列向量上調用時,它會產生一個字符串列表(表示爲20d char),'fliplr'會對它們做「正確」的事情。 – 2013-04-27 10:07:18

-1

如下你可以這樣做:

A=10:999999; %I am assuming you want to start from 10 since a single digit will always be palindrome. 

for i=1:length(A) 
    digits1 = sscanf(strrep(num2str(A(i),10),'.',''),'%1d')'; %If you want to support 
       %numbers more than 10 digits, replace above number accordingly. 
    digits2=fliplr(digits1); 
    if digits1==digits2 
     palindrome(i)=1; 
     fprintf('A palindrome\n'); 
    else 
     palindrome(i)=0; 
     fprintf('Not a palindrome\n'); 
    end 
end 
相關問題