اکنون که پاسخ پرسش دیگرتان را نگاه کردم متوجه شدم که شکل فرمول پیشین را میشد کوچکتر هم کرد. یعنی جمع رقمهای عدد طبیعیِ $n$ را میتوان به شکل سمت راست تساوی زیر نیز نوشت.
$$[\frac{n}{10^{[\log_{10}^n]}}]+\Big(\sum_{i=1}^{[\log_{10}^{n}]-1}\big([\frac{n}{10^i}]-10[\frac{n}{10^{i+1}}]\big)\Big)+(n-10[\frac{n}{10}])=\\
\sum_{i=0}^{[\log_{10}^n]}\big([\frac{n}{10^i}]-10[\frac{n}{10^{i+1}}]\big)$$
به همین شکل برای ضرب رقمهای عدد طبیعیِ $n$ نیز میتوان نوشت؛
$$\prod_{i=0}^{[\log_{10}^n]}\big([\frac{n}{10^i}]-10[\frac{n}{10^{i+1}}]\big)$$
یک کد میپل هم در زیر برایتان نوشتم که یک عدد طبیعی را میگیرد و با کمک فرمول بالا حاصلضرب رقمهایش را پس میدهد.
prodDigits:=proc(n::posint)::posint;
description "returns the product of digits of the input natural number.";
local i::nonnegint;
return(product(floor(n/10^i)-10*floor(n/10^(i+1)),i=0..floor(log[10](n))));
end proc;
که برای نمونه اگر عدد ۱۲۳ را به آن بدهید یعنی تایپ کنید prodDigits(123);
به شما عدد ۶ را میدهد. تابع بالا را میتوانید با جابجا کردنِ product
با add
به یک تابع برای جمع رقمها تبدیل کنید. یعنی کد زیر.
addDigits:=proc(n::posint)::posint;
description "returns the sum of digits of the input natural number.";
local i::nonnegint;
return(add(floor(n/10^i)-10*floor(n/10^(i+1)),i=0..floor(log[10](n))));
end proc;