我被要求编写一个代码,该代码获得一个自然数并多次打印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--;
}
答案 0 :(得分:0)
有符号整数溢出是未定义的行为,因此您无法检查它是否发生,因为您无法保证所发生的事情。相反,您可以对照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;
}