2.1 Дано натуральное число n. Удалить в этом числе все единицы и пятёрки, оставив порядок цифр прежним. Например, число 527012 преобразуется в 2702.
Как мы увидели во всех предыдущих задачах, операция mod 10 (%10) выделяет последнюю цифру справа. Если выделенную цифру добавлять к числу справа, то получим число с обратным порядком цифр. В нашей задаче порядок цифр не должен меняться, значит мы должны добавлять выделяемые цифры слева. Это немного сложнее. Если число m однозначное, то добавить к нему цифру q слева можно так m:=q*10+m; Если число m двухзначное, то m:=q*100+m; трехзначное - m:=q*1000+m; и так далее. В нашей программе за умножение цифры на 10, 100, 1000 и т.д. отвечает переменная p, значение которой увеличивается в 10 раз после добавления очередной цифры (строка 13). А чтобы по условию задачи удалить из числа все единицы и пятёрки, то в строке 10 мы и проверяем, добавлять ли цифру к числу или нет (1 и 5 не будут добавлены).
Можно, конечно, в этой программе не запоминать n (и не вводить дополнительную переменную n1), но здесь мы это сделали просто для того, чтобы вы привыкли не портить исходные данные.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Program A2_5; Var n,n1,m,q,p:integer; begin readln(n); n1:=n; m:=0; p:=1; while (n1<>0) do begin q:=n1 mod 10; if (q<>1) and (q<>5) then begin m:=q*p+m; p:=p*10; end; n1:=n1 div 10; end; writeln(m); readln; end. |
// Program A2.5;
#include <iostream>
using namespace std;
int main() { int n,n1,m=0,q,p=1; cin>>n; n1=n; while (n1) { q=n1%10; if (q!=1 && q!=5) {m=q*p+m; p=p*10;} n1=n1/10; } cout<<m<<endl; return 0; } |