Заменить все встречающиеся в тексте числа на эти же числа в двоичной системе счисления - 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. Для каждого символа выполняется следующее действие:

  1. Переменная n увеличивается на значение текущего символа.
  2. Значение текущего символа в двоичной системе счисления заменяется на значение переменной n/2.
  3. Переменная n обновляется следующим образом: если остаток от деления n на 2 равен 1, то n увеличивается на 10 (десятичная система счисления), иначе увеличивается на 0.
  4. Если первый символ строки равен 0, то он пропускается, иначе рекурсивно вызывается функция dectobin для подстроки, начиная с первого символа и заканчивая последним символом в end.
  5. В конце функции выводится значение переменной n/10 в десятичной системе счисления. В функции main создается строка 12345678901234567890 и передается в функцию dectobin. После вызова функции dectobin выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.625 из 5
Похожие ответы