Заменить в числе каждое вхождение цифры a на цифру b - C (СИ)
Формулировка задачи:
Проблема с такой задачей.
Дано число N, а также цифры A и B. Заменить в этом числе каждое вхождение цифры A на цифру B.
Технические условия
Входные данные
Программе даны числа N, A, B (1 ≤ N ≤ 109).
Выходные данные
Вывести полученное число.
Программа выглядит так, только прошла лишь на 88 процентов.
Подскажите, что я не учёл?
#include <stdio.h>
#include <string.h>
int main() {
int N, a[14], c, d;
int i = 0, j;
scanf("%d %d %d", &N, &c, &d);
if(N < 0) {
N = -N;
}
while(N > 0) {
a[i] = N % 10;
N = N / 10;
i++;
}
for(j = 0; j < i; j++) {
if(a[j] == c) {
a[j] = d;
}
}
for(j = i - 1; j > 0; j--) {
printf("%d", a[j]);
}
printf("%d\n", a[0]);
return 0;
}Решение задачи: «Заменить в числе каждое вхождение цифры a на цифру b»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
int N,c, d,i=0;
char a[14];
scanf("%d %d %d", &N, &c, &d);
if(N < 0)N = -N;
if(c>9)c=9;
if(c<0)c=0;
if(d>9)d=9;
if(d<0)d=0;
while(N > 0)
{
a[i] = (N % 10);
if(a[i] == c)a[i] = d;
a[i]+='0';// превратили в букву
N = N / 10;
i++;
}
a[i]=0;// конец строки
strrev(a); // перевернули строку
sscanf(a,"%d",&N);// превратили в число
printf("%d",N);
getch();
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Ввод исходного числа N, за которым вводятся два числа c и d. Если c или d некорректны (больше 9 или меньше 0), то они заменяются на 0.
- Инициализируется массив a размером 14 для хранения результата.
- Число N приводится к положительному значению, используя операцию модуля (N % 10).
- В цикле while происходит деление числа N на 10 и сохранение остатка в массиве a.
- Если остаток в массиве a равен c, то он заменяется на d.
- Каждое значение в массиве a приводится к числу, добавляя символ '0'.
- После окончания цикла, в массиве a остается одно значение, которое является результатом.
- Строка в массиве a переворачивается с помощью функции strrev.
- Результат в массиве a преобразуется обратно в число с помощью функции sscanf.
- Результат выводится на экран с помощью функции printf.
- Программа ожидает нажатия клавиши с помощью функции getch.
- Программа завершается с кодом 0.