Программа на C, которая возвращает сумму цифр целого числа - PullRequest
0 голосов
/ 25 февраля 2019
#include <stdio.h>
int main()
{

int sum=0, prod=1, a, b;

printf("Enter a number: \n");

scanf("%d",&a);

while (a!=0)

sum = sum + a%10;
    a = a/10;

while (b!=0)

prod = prod + b%10;
    b = b/10;


printf("Sum=%d\nProd=%d\n", sum, prod);


return 0;
}

Эта программа на C возвращает сумму и произведение цифр заданного целого числа, но я хочу, чтобы кто-то разбил его для меня, а также, когда я его запустил, он не работает, так что кто-то может исправитьмне, пожалуйста.

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Ваш код имеет очень плохие отступы и необходимые разделители блоков {} отсутствуют.Также b не инициализируется, и вы вычисляете сумму, а не произведение цифр.

Вот исправленная версия:

#include <stdio.h>

int main() {
    int n, sum, prod, a, b;

    printf("Enter a number: \n");

    if (scanf("%d", &n) != 1)
        return 1;

    a = n;
    sum = 0;
    while (a != 0) {
        sum = sum + a % 10;
        a = a / 10;
    }

    b = n;
    prod = 1;
    while (b != 0) {
        prod = prod * (b % 10);
        b = b / 10;
    }

    printf("Sum=%d\nProd=%d\n", sum, prod);

    return 0;
}
0 голосов
/ 25 февраля 2019

Когда вы читаете число от пользователя, прочитайте строку.

#include <ctype.h>
#include <stdio.h>
#include <string.h>

int main(void) {
    char buf[999];
    while (fgets(buf, sizeof buf, stdin)) { // read a string rather than scanf an integer
        buf[strcspn(buf, "\n")] = 0; // remove trailing newline
        char *p = buf;
        int invalidflag = (*p == 0);
        unsigned sum = 0;
        unsigned product = 1;
        while (*p) {
            if (isdigit((unsigned char)*p)) {
                sum += *p - '0';
                product *= *p - '0';
            } else {
                invalidflag = 1;
                break;
            }
            p++;
        }
        if (invalidflag) {
            printf("input = \"%s\" ==> INVALID INPUT\n", buf);
        } else {
            printf("input = \"%s\"; sum = %d; product = %d\n", buf, sum, product);
        }
    }
    return 0;
}

См. Ideone.com/ZLkOfJ

0 голосов
/ 25 февраля 2019

% - операция модуля, т.е. она напоминает вам деление делителем.В вашем случае операция % 10 эффективно возвращает последнюю цифру числа.Вы суммируете эту цифру с переменной prod, которая представляет общую сумму цифр.После суммирования текущей цифры вы выполняете следующую основную операцию / 10, которая является целочисленным делением и просто удаляет последнюю цифру числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...