如何检查是否溢出并返回0

时间:2019-04-30 07:33:08

标签: c overflow

我被要求编写一个代码,该代码获得一个自然数并多次打印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 :(得分:0)

有符号整数溢出是未定义的行为,因此您无法检查它是否发生,因为您无法保证所发生的事情。相反,您可以对照INT_MAX中的limits.h来检查您的数字,如果数字小于10倍,那么如果再乘以10就会溢出。

但是在这里不使用整数,而是像这样打印1111...数字会更有意义:

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

如果111n,则将打印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;
}