我已經創建了下面的代碼:爲什麼Matlab沒有返回迴文數字?
A = [0:1:999].*[0:1:999]';
B = mat2str(A);
B(B == fliplr([B]))
並且希望它由迴文數(同一向前和向後例如99,101,97479等)進行篩選。我得到的數字不是迴文,我的代碼有什麼問題?
我已經創建了下面的代碼:爲什麼Matlab沒有返回迴文數字?
A = [0:1:999].*[0:1:999]';
B = mat2str(A);
B(B == fliplr([B]))
並且希望它由迴文數(同一向前和向後例如99,101,97479等)進行篩選。我得到的數字不是迴文,我的代碼有什麼問題?
試試這個:
A = [0:1:999].*[0:1:999];
B = str2num(fliplr(num2str(A')))';
palNums = A(A == B);
palNums
應該只包含迴文數了。
+1我們應該包括一個解釋:OP的代碼不工作的原因是'mat2str'會將大的二維數組轉換爲一個單獨的長字符串(包含Matlab表達式來重現該數組)。你真正想要的是產生一個相應的字符串數組,然後分別翻轉字符串。 'num2str'這樣做是因爲當在一個列向量上調用時,它會產生一個字符串列表(表示爲20d char),'fliplr'會對它們做「正確」的事情。 – 2013-04-27 10:07:18
如下你可以這樣做:
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
首先,你的代碼不會運行(它不會因爲它的尺寸不匹配錯誤的第一行) – 2013-04-27 05:24:50
也許OP正在運行,在八度?倍頻會將正交向量擴展到二維陣列,因此第1行將產生一個1000乘1000的陣列。 – 2013-04-27 10:03:31