Анонимные функции: Напишите программу 1

Сообщения
1,547
Реакции
271
Веб-сайт
tehadm.ru
Используем анонимные функции на практике.

Внутри функции main (объявлять ее не нужно) вы должны объявить функцию вида func(uint) uint, которую внутри функции main в дальнейшем можно будет вызвать по имени fn.

Функция на вход получает целое положительное число (uint), возвращает число того же типа в котором отсутствуют нечетные цифры и цифра 0. Если же получившееся число равно 0, то возвращается число 100. Цифры в возвращаемом числе имеют тот же порядок, что и в исходном числе.

Пакет main объявлять не нужно!
Вводить и выводить что-либо не нужно!

Уже импортированы - "fmt" и "strconv", другие пакеты импортировать нельзя.

Sample Input:
727178

Sample Output:
28
 
C-like:
package main

import (
    "strconv"
)

func main() {
    fn := func(num uint) uint {
        strNum := strconv.FormatUint(uint64(num), 10)
        result := ""
        for _, char := range strNum {
            if char != '0' && (char-'0')%2 == 0 {
                result += string(char)
            }
        }
        if result == "" {
            return 100
        }
        resUint, _ := strconv.ParseUint(result, 10, 32)
        return uint(resUint)
    }
}
 
C-like:
fn := func(i uint) uint {
        iUint := uint64(i)
        var newStr string
        iStr := strconv.FormatUint(iUint, 10) // конвертировали введенное число в строку
        iRune := []rune(iStr)                 // конвертировали эту строку в срез рун
        for _, val := range iRune {           // итерируемся по срезу рун, учитывая только символы
            v, err := strconv.Atoi(string(val)) // превращаем каждую руну в строку, а потом - в число
            if err != nil {
                fmt.Println(err, val)
            }

            if v%2 != 0 || v == 0 { // если число нечетное или равно нулю, пропускаем его
                continue
            }
            newStr += string(val) // если число четное, превращаем его обратно в строку и записываем в newStr при помощи конкатенации
        }
        if newStr == "" { // проверяем, что нашлись хоть какие-то четные числа. Если их вообще нет, то возвращаем 100
            return 100
        }
        iInt, err := strconv.Atoi(newStr) // получившуюся строку преобразуем в число
        if err != nil {
            fmt.Println(err)
        }
        if iInt == 0 { // если число равно 0, возвращаем 100
            return 100
        }
        return uint(iInt) // если число не равно 0, возвращаем само это число
    }
 
C-like:
fn := func(x uint) uint{
    var s1 string
    s := strconv.FormatUint(uint64(x), 10)
    for i := range s{
        a, _ := strconv.Atoi(string(s[i]))
            if a != 0 && a % 2 == 0{
                s1 += string(s[i])
                             }
    }
    z, _ := strconv.ParseUint(s1, 10, 64)
    if z == 0{
    return 100
    }
    return uint(z)
}
 
Назад
Сверху Снизу