我想知道如何在Matlab中对多位数的数字求和。
例如1241 = 1 + 2 + 4 + 1 = 8
答案 0 :(得分:5)
基于字符串的答案:
>> n = 1241;
>> sum(int2str(n)-48)
ans =
8
首先使用int2str
将数字转换为字符串表示,然后从字符串的每个元素的ASCII代码中减去'0'
的ASCII代码(即48),生成数字向量。然后将其相加以得到结果。
答案 1 :(得分:1)
A = 35356536576821;
A = abs(A);
xp = ceil(log10(A)):-1:1;
while ~isscalar(xp)
A = sum(fix(mod(A,10.^xp)./10.^[xp(2:end) 0]));
xp = ceil(log10(A)):-1:1;
end
这是数字方法
答案 2 :(得分:1)
这是解决方案的特征方法:
A = '35356536576821';
A = char(regexp(A,'\d+','match'));
while ~isscalar(A)
A = num2str(sum(A - '0'));
end
两者,首先取绝对数(剥去负数)然后:数字用log10()
计数一个数字有多少位数,通过模数和除数提取求和的数字,而char方法转换对于隐式转换为- '0'
的数字,求和并再次转换回字符串。
答案 3 :(得分:1)
另一种全算术方法:
n = 1241; %// input
s = 0; %// initiallize output
while n>0 %// while there is some digit left
s = s + mod(n-1,10)+1; %// sum rightmost digit
n = floor(n/10); %// remove that digit
end
答案 4 :(得分:1)
您可以使用此代码
sum(int2str(n)-48)
其中n是您的输入数字。