2013-04-27 54 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 
相关问题