А что с кодом не так? Он работает и возвращает правильный результат. 
Как работает?
Код:
    for (i = 1; i <= Y; i++)
    {
        s = i;
        M = i;
        for (j = 1; j <= i-1; j++)
        {
            s = SumDigits(s);
            M += s;
При i = 1 условие во втором цикле не выполняется, и соответственно вход в него не происходит. То есть, реально начинает считать с i = 2, не знаю, так ли было задумано автором кода.
При каждом введённом Y программа выдаёт единственный результат да-нет: либо выполнилось условие if (M == Y), либо нет. Оно выполняется только один раз, дальше можно не считать, выходить из обеих циклов. Что-бы получить линейку результатов, нужен либо ещё один цикл, либо вручную вводить Y, например, от 1 до 100 - и вручную записывать результат на бумажке. А так да, вроде работает, но я бы не понял, что оно работает, если бы г-н 
Dmitriy40 не выложил таблицу с готовыми результатами.
Не понятен смысл вывода на экран переменной i.