在c中输入大号
taking input of large no in c
我们的初始数字是 1,2 ,3 ,4 和 5 。我们可以使用五个整数中的四个来计算以下总和:
如果我们对除 1 之外的所有值求和,我们的总和为 。 2+3+4+5;
和其他一样
如您所见,最小总和为min,最大总和为max。因此,我们在新行上将这些最小和最大总和打印为两个 space 分隔的整数。
提示:小心整数溢出!使用 64 位整数。
这是我的问题,但它未能测试某些值....我认为这是数据类型问题,但我已经花了最长的时间,我不能
此输入失败:
769082435 210437958 673982045 375809214 380564127
帮帮我。
int main()
{
int n=5;
long long unsigned int *arr = malloc(sizeof(int) * n);
long long unsigned int ar[n],min=0,max=0,sum=0;
for(int i=0;i<n;i++)
{
scanf("%lld",&arr[i]);
}
for(int i=0;i<n;i++)
{
sum= arr[i]+sum;
}
for(int i=0;i<n;i++)
{
ar[i] = sum -arr[i];
}
for(int i=0; i<n ;i++)
{
min=ar[0];
if(min> ar[i])
min =ar[i];
}
for(int i=0; i<n ;i++)
{
max=ar[0];
if(max< ar[i])
max =ar[i];
}
printf("%lld %lld",min,max);
return 0;
}
您需要为正确类型的变量分配内存,即 unsigned long long
而不是 int
。要摆脱这些愚蠢的错误,您可以使用这种简单的方法 -
long long unsigned int *arr = malloc(sizeof *arr * n);
在这里您不必担心指向的内容的类型。没有你明确提及就确定了。
在 for 循环中,您一次又一次地将 min
设置为 ar[0]
。这是不对的。在进入循环之前只执行一次。 max
变量也一样。 for 循环将是(对于 max
变量也类似)
unsigned long long min =ar[0];
for(int i=0; i<n ;i++)
{
if(min > ar[i])
min = ar[i];
}
您分配的字节数错误:
long long unsigned int *arr = malloc(sizeof(int) * n);
您想创建一个 long long unsigned int
的数组,但您只分配了
space 对于 n
ints
。正确的 malloc
调用是
long long unsigned int *arr = malloc(n * sizeof *arr);
至于另一个错误,coderredoc的回答告诉你更多关于这些的信息,这里没有必要重复它们。
我们的初始数字是 1,2 ,3 ,4 和 5 。我们可以使用五个整数中的四个来计算以下总和:
如果我们对除 1 之外的所有值求和,我们的总和为 。 2+3+4+5;
和其他一样
如您所见,最小总和为min,最大总和为max。因此,我们在新行上将这些最小和最大总和打印为两个 space 分隔的整数。
提示:小心整数溢出!使用 64 位整数。
这是我的问题,但它未能测试某些值....我认为这是数据类型问题,但我已经花了最长的时间,我不能
此输入失败: 769082435 210437958 673982045 375809214 380564127
帮帮我。
int main()
{
int n=5;
long long unsigned int *arr = malloc(sizeof(int) * n);
long long unsigned int ar[n],min=0,max=0,sum=0;
for(int i=0;i<n;i++)
{
scanf("%lld",&arr[i]);
}
for(int i=0;i<n;i++)
{
sum= arr[i]+sum;
}
for(int i=0;i<n;i++)
{
ar[i] = sum -arr[i];
}
for(int i=0; i<n ;i++)
{
min=ar[0];
if(min> ar[i])
min =ar[i];
}
for(int i=0; i<n ;i++)
{
max=ar[0];
if(max< ar[i])
max =ar[i];
}
printf("%lld %lld",min,max);
return 0;
}
您需要为正确类型的变量分配内存,即 unsigned long long
而不是 int
。要摆脱这些愚蠢的错误,您可以使用这种简单的方法 -
long long unsigned int *arr = malloc(sizeof *arr * n);
在这里您不必担心指向的内容的类型。没有你明确提及就确定了。
在 for 循环中,您一次又一次地将 min
设置为 ar[0]
。这是不对的。在进入循环之前只执行一次。 max
变量也一样。 for 循环将是(对于 max
变量也类似)
unsigned long long min =ar[0];
for(int i=0; i<n ;i++)
{
if(min > ar[i])
min = ar[i];
}
您分配的字节数错误:
long long unsigned int *arr = malloc(sizeof(int) * n);
您想创建一个 long long unsigned int
的数组,但您只分配了
space 对于 n
ints
。正确的 malloc
调用是
long long unsigned int *arr = malloc(n * sizeof *arr);
至于另一个错误,coderredoc的回答告诉你更多关于这些的信息,这里没有必要重复它们。