Заменить все встречающиеся в тексте числа на эти же числа в двоичной системе счисления - C (СИ)
Формулировка задачи:
Условие задачи:
На планете Роботов очень не любят десятичную систему счисления, поэтому они попросили Вас написать программу, которая заменяет все встречающиеся в тексте числа на эти же числа, но в двоичной системе счисления.
Входные данные
Единственная строка, состоящая из любых символов. Длина строки не превышает 255 символов. Гарантируется, что во всех числах нет ведущих нулей.
Выходные данные
Выведите преобразованную строку.
Примеры
входные данные
6^&678JKjdkdl;?.,lk879Pk1kdfl4839
выходные данные
110^&1010100110JKjdkdl;?.,lk1101101111Pk1kdfl1001011100111
Мой код:
//http://informatics.mccme.ru/mod/statements/view3.php?id=248&chapterid=2805#1 (сайт с задачей) #include <stdio.h> #include <stdlib.h> #include <string.h> void dectobin(int n){//Рекурсивная функция перевода числа из десятичной системы счисления в двоичную if (n>=2){ dectobin( n/2 ); } printf("%d", n % 2); } int main(void){ system("chcp 1251>nul"); int i,l,r,t; char str[1111],temp[1111]; scanf("%[^\n]",str); i=0; while(i<strlen(str)){ if ((str[i]>='0') && (str[i]<='9')){//Пытаемся найти число в строке l=i;//Левый край числа r=i;//Предположительный правый край числа while((str[r]>='0') && (str[r]<='9') && (r<strlen(str))){ r++; } r--;//Правый край числа memset(temp,0,1111);//Обнуление строки temp //Нужная часть (число) из строки str (с определенных позиций) //копируется в строку temp: strncpy(temp,str+l,r-l+1); t=atoi(temp);//Строка->число dectobin(t);//Вызов функции перевода i=r+1; } else{ printf("%c",str[i]);//Иначе печатаем символ и идем дальше i++; } } system("pause>nul"); return 0; }
Решение задачи: «Заменить все встречающиеся в тексте числа на эти же числа в двоичной системе счисления»
textual
Листинг программы
void dectobin(char *s,char *end) { char *p,n; for(n=0,p=s; p<=end; p++) { n+=*p; *p=n/2; n=n%2*10; } if(!*s) s++; if(s<=end) dectobin(s,end); printf("%d",n/10); } int main(int argc,char* argv[]) { char s[]="12345678901234567890"; char *p; for(p=s; *p; p++) *p-='0'; dectobin(s,p-1); printf("\n");
Объяснение кода листинга программы
В данном коде представлена функция dectobin
, которая принимает два аргумента: указатель на начало строки s
и указатель на конец строки end
.
Внутри функции происходит итерация по каждому символу в строке, начиная с первого и заканчивая последним символом в end
.
Для каждого символа выполняется следующее действие:
- Переменная
n
увеличивается на значение текущего символа. - Значение текущего символа в двоичной системе счисления заменяется на значение переменной
n/2
. - Переменная
n
обновляется следующим образом: если остаток от деленияn
на 2 равен 1, тоn
увеличивается на 10 (десятичная система счисления), иначе увеличивается на 0. - Если первый символ строки равен 0, то он пропускается, иначе рекурсивно вызывается функция
dectobin
для подстроки, начиная с первого символа и заканчивая последним символом вend
. - В конце функции выводится значение переменной
n/10
в десятичной системе счисления. В функцииmain
создается строка12345678901234567890
и передается в функциюdectobin
. После вызова функцииdectobin
выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д