C程序中答案不正确,我缺少什么?

时间:2014-04-23 10:01:44

标签: c math

以下C程序用于查找公式(a + b)^ 2的值。

#include <stdio.h>
#include <conio.h>
void main()
{
int a ,b , c;
clrscr ();
printf ("\n ENTER THE VALUE OF A AND B:");
scanf("%d %d", &a,&b);
c = a*a + b*b +2*a*b;
printf(" \n THE FINAL RESULT IS = %d ", c);
getche();
}

运行时,当我输入a和b的值为1和88888时,它给出了-688680271作为答案:

“输入A和B的值:1 88888  最终结果是= -688680271“

但答案是错的,应该是7901254321.请帮帮忙。 THX

7 个答案:

答案 0 :(得分:4)

您知道int通常只有32位宽吗?

88888 * 88888 = 7901076544

这已经需要33位来表示。你有一个整数溢出。尝试使用long long int作为您的类型。

long long int a ,b , c;
// ...
scanf("%lld %lld", &a,&b);
// ...
printf(" \n THE FINAL RESULT IS = %lld ", c);

答案 1 :(得分:2)

您使用的int没有您期望的输出范围使用long long int

答案 2 :(得分:0)

也许你所在的系统缺乏int的精度。您使用复古clrscr()函数表明了这一点。请尝试使用long long。您需要更改I / O代码以使用正确的格式说明符。此外,在依赖结果之前,您应该检查scanf()是否成功。

答案 3 :(得分:0)

您遇到的情况称为“整数溢出”。简单地说,int没有足够的位来保存数字88888 ^ 2。当你进行乘法时,结果将超出int的限制。当int溢出时,结果是未定义的;但是在大多数情况下,你最终得到一个负数。

答案 4 :(得分:0)

在简单的单词中 - -int最多可以容纳4位数.try long int或long Double。'

#include <stdio.h>
#include <conio.h>
void main()
{
int a ,b , c;
clrscr ();
printf ("\n ENTER THE VALUE OF A AND B:");
scanf("%d %d", &a,&b);
c = a*a + b*b +2*a*b;
printf(" \n THE FINAL RESULT IS = %d ", c);  
getche();
}

答案 5 :(得分:0)

使用数据类型long而不是int。数据类型“int”仅支持最多32,768的值。它不支持88888,因为它大于32,768

答案 6 :(得分:0)

您应该检查数据类型可以容纳的值范围。这会给你一个想法:

short int and int: -32,767 to 32,767
unsigned short int and unsigned int: 0 to 65,535
long int: -2,147,483,647 to 2,147,483,647
unsigned long int: 0 to 4,294,967,295

因此,你的变量'b'至少应该是long int而变量'c'至少应该是long long int。下面的代码应该有效:

....
int a;
long int b;
long long int c;
....
printf ("\n ENTER THE VALUE OF A AND B:");
scanf("%d %ld", &a,&b);
c = a*a + b*b +2*a*b;
printf(" \n THE FINAL RESULT IS = %lld ", c);
....