以下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
答案 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);
....