Найти '1' в числе

107
09 октября 2021, 13:30

Возможно только через математическое выражение определить, есть ли в числе единица?

Например из:

  • 100
  • 125
  • 1175
  • 2150
Answer 1

Такой вариант вас не пугает? :)

P.S. Надеюсь, не ошибся :)

P.P.S. Без символов Кронекера:

P.P.P.S. Пользуйте

bool has_1(int n)
{
    for(;n;n/=10) if (n%10==1) return true; return false;
}

и не морочьте голову... :)

Answer 2

Кажется, как-то так:

min(sum i from 0 to infinity of (1 - min(abs(1 - floor(x/10^i) mod 10), 1)), 1)
Answer 3
// 1. подключаем библиотеки
// 2. считываем строку 
// 3. превращаем строку в число
// 4. число превратить в строку
// 5. найти в строке знак 1
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 10
int main()
{
    char s[256];    // сюда вводим
    char buffer[256];  // а здесь считаем длину
    int x; int err =0;
    bool test_fgets=true;
    do
    {
        // этот блок для того чтобы отлавливать такие "исключения": вводим 33223йцу, а выводит 33223
        do{
            printf("\nВведите целое число :");
            test_fgets=true;
            fgets(s,N,stdin);
            for(int i=0;s[i]!='\n';i++){
                if(test_fgets==true)
                    if(s[i]<'\x30' || s[i]>'\x39'){
                        printf("Ошибка. Повторите ввод!\n"); test_fgets=false;}
            }
        } while(test_fgets!=true);
        // ---
        err=sscanf(s, "%d",&x);
        if (err!=1)
            printf("\n Ошибка ввода. \n ");
    } while (err!=1);
    printf("\n Введено целое число : %d ", x);
    sprintf(buffer, "%d", x); //число превратить в строку
     //ищем в строке знак 1
    int p  = 0; // при появлении знака 1 то датчик p увеличивается
    for (int i =0;i<strlen(buffer);i++)
        if(buffer[i] == '1')
            p++;
     printf("\n в числе символа \"1\" было : %d \n", p);
    return 0;
}

Главное это вот этот "кусок кода", в этом алгоритме ибо реализаций ввода может быть множество

   //ищем в строке знак 1
    int p  = 0; // при появлении знака 1 то датчик p увеличивается
    for (int i =0;i<strlen(buffer);i++) 
        if(buffer[i] == '1')
            p++;

READ ALSO
как найти максимальную разницу между двумя соседними элементами массива?

как найти максимальную разницу между двумя соседними элементами массива?

Написал код, создал динамический массив , по заданию нужно указать максимальную разность между двумя соседними элементами массива и выделить...

89
можно ли получить видео поток окна в windows

можно ли получить видео поток окна в windows

У нас есть какая-то запущенная оконная программаМне нужно получать кадры изображения этого окна, как только они обновляются

85
Слайдер с отступом

Слайдер с отступом

Помогите пожалуйста как сделать слайдер который имеет отступ с одной стороны, при прокрутке первого элемента слайдер уходит на ширину экрана?...

109
Несколько кнопок в форме обратной связи

Несколько кнопок в форме обратной связи

У меня есть форма, в ней одна кнопка отправки и две и несколько полей requiredПроблема в чем: две кнопки не работают, пока не будут заполнены...

100