C语言中类型溢出问题 题目:已知不等式.......请编程对用户指定的n值计算并输出满足该不等式的m的整数解。

C语言中类型溢出问题 题目:已知不等式.......请编程对用户指定的n值计算并输出满足该不等式的m的整数解。,第1张

C语言中类型溢出问题 题目:已知不等式.......请编程对用户指定的n值计算并输出满足该不等式的m的整数解。

C语言中类型溢出问题
题目:已知不等式 1!+2!+3!+…+m!‹n,请编程对用户指定的n值计算并输出满足该不等式的m的整数解。
输入:2000000000
输出:m<=12

错误示例:

int main(void)
{
	int n,j,m;
	int sum=0;
	j=1;

	scanf("%d",&n);

	for(m=1;;m++)
	{
		j*=m;
		sum+=j;
		if(sum>=n)
			break;
	}

	printf("m<=%dn",m-1);

	return 0;
}

输入之后结果为 28;(错误)

正确代码:

#include

int main(void)
{
	long int m,n;
	double j,sum;
	sum=0.0;
	j=1.0;

	scanf("%d",&n);

	for(m=1;;m++)
	{
		j*=m;
		sum+=j;
		if(sum>=n)
			break;
	}
	printf("m<=%d",m-1);

	return 0;

}

输出结果为12;(正确)

错误原因:类型溢出问题
int 和long型数据在内存中占4个字节,数据的范围在-21亿~21亿,无法容纳所得结果。因此定义为double型提高精度。int可以表示9位及以下整数,准备上限为2147483647.

左侧为错误代码运行,右侧为正确代码:

j在循环执行之后应该为6227020800,但是整型的j只能储存9位数 左侧的结int储存数据过大,导致结果错误。
double占8个字节(64位)存空间,最多可提供16位有效数字,小数点后默认保留6位。如全是整数,最多提供15位有效数字。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5155633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存