Как проверить, нет ли переполнения и вернуть 0 - PullRequest
2 голосов
/ 30 апреля 2019

Меня попросили написать код, который получает натуральное число и печатает сумму 1 несколько раз.Например, 3 для программы произнесет 1 + 11 + 111. Когда число, которое вы получаете, больше, чем 11, тогда у меня переполнение.Я хочу написать функцию, которая получает значение и знает, как сортировать, если переполнение произошло, если так, чтобы вернуть 0. Спасибо.

int i = 0, num, newNum = 0;
printf("Insert a natural number\n");
scanf("%d", &num);
while (num <= 0)
{
    printf("%d Is not a natural number, try again\n", num);
    scanf("%d", &num);
}
while (num > 0)
{
    i *= 10;
    i++;
    newNum += i;
    num--;
}

1 Ответ

0 голосов
/ 30 апреля 2019

Переполнение со знаком целого числа является неопределенным поведением, поэтому вы не можете проверить, произошло ли это, потому что у вас нет никаких гарантий относительно того, что произошло. Вместо этого вы можете сравнить свой номер с INT_MAX из limits.h, и если он будет меньше, чем в 10 раз, он переполнится, если вы умножите его на 10.

Но было бы гораздо разумнее не использовать здесь целые числа, а просто напечатать свой номер 1111... следующим образом:

for (int i = 0; i < n; i++) {
    printf("1");
}

Будет напечатано 111, если n равно 3.

Вы можете использовать это так:

int main()
{
    int n = 5; // results in "1 + 11 + 111 + 1111 + 11111"
    for (int i = 1; i < n+1; i++) {
        for (int j = 0; j < i; j++) {
            printf("1"); // or putchar('1');
        }
        if (i < n) {
            printf(" + ");
        }
        else
            printf("\n"); // or puts("");
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...