
Първоначално написано от
bubsi1
Моля да ми помогнете по информатика с една задача:
Да се състави програма, която въвежда от клавиатурата цяло положително четирицифрено число. Програмата да извежда сумата и произведението от цифрите на числото.
Примерен вход:1234 Примерен изход:10 24
Примерен вход:2508 Примерен изход:15 0
Моляяя Ви, помагайте ии ако някой я реши моля да обясни как го е направил..

Не знам на какъв език е, ще карам на С++
Код:
#include <iostream>
using namespace std;
int main()
{
int n, s, p;
cout<<"Vuvedete chetiricifreno chislo n="; cin>>n;
while (n<1000 || n>9999)
{
cout<<"\nVuvedete chetiricifreno chislo!!";
cout<<"\nn="; cin>>n;
}
s=0; p=1;
while (n!=0)
{
s+=n%10;
p*=n%10;
n/=10;
}
cout<<"\n"<<s<<" "<<p;
std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
std::cin.get();
return 0;
}
Идеята е следната:
Въвеждаме число n.
След това проверяваме дали числото е между 1000 и 9999 (положително четирицифрено). Ако не е, питаме за повторно въвеждане, докато не се въведе такова. Това го постигаме чрез първия while.
Нулираме сумата и произведението (s=0 първоначално, а р=1 първоначално, защото ако беше 0, винаги щеше да си остава нула, по каквото и да го умножим). След това ще вадим цифрите и на всяка стъпка ще прибавяме извадената в сумата и ще умножаваме с нея произведението. Така докато не свършат цифрите.
Как вадим цифри? Като раделим n по модул 10 (връща остатакът от деление на 10), лесно се забелязва, че ни дава последната цифра. Ето например 1394 : 10 = 139 и остатък 4. По този начин, ползвайки n%10, получаваме последната. Въпросът е, като сме я получили, как да преминем към следващата. Като разделим с целочислено деление на 10, всъщност получаваме числото без последната цифра. Защо? да проверим отново с 1394:10 = 139 и остатък 4, но целочисленото деление не запазва остатъкът и всъщност имаме 1394/10 = 139. Така n/=10 ни дава числото без последната цифра. Повтаряме тези две стъпки (запазване на остатък и премахване на цифра), докато не свършат цифрите. Тогава s и p ще са придобили търсените стойности.
Код:
std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
std::cin.get();
Тези редове просто казват на програмата да изчака да цъкнеш enter, преди да се затвори, за да можеш да видиш резултата.