Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
好的,这是我尝试做的一个简单问题的代码from Codechef。这个问题很简单,但是由于某种原因,我在使用大输入时得到了错误的答案,但是对于小输入却得到了正确的答案。
例
当我将
我的密码
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
好的,这是我尝试做的一个简单问题的代码from Codechef。这个问题很简单,但是由于某种原因,我在使用大输入时得到了错误的答案,但是对于小输入却得到了正确的答案。
例
当我将
houses
分配给10
并将k
分配给2
时,我得到的是正确的金额,但是当房子保持不变并使用k=10
时,我会收到错误的答案。我的密码
#include<stdio.h>
#include<math.h>
int main(){
int houses[1000],k,numberofhouses;
int sum=0,tmpsum=0;
int i,j,d;
// printf("enter number of houses\n");
scanf("%d",&numberofhouses);
// printf("enter k\n");
scanf("%d",&k);
// printf("enter distance\n");
for(i=0;i<numberofhouses;i++) {
scanf("%d",&houses[i]);
}
for(i=0;i<(numberofhouses-1);i++) {
for(j=i+1;j<numberofhouses;j++) {
d = ( houses[i] - houses[j] );
tmpsum = pow(abs(d),k);
sum = sum + 2 * tmpsum;
}
}
printf("sum is %d",sum);
return 0;
}
最佳答案
使用大输入时,输出错误的主要原因是tmpsum= pow(abs(d),k);
行,这是由于溢出所致。
对于较大的值,pow(a,b)
的结果大于int
数据类型可以承受的结果。
尝试将数据类型更改为long long int
。
因为即使long long int
也不适合您。您需要实现自己的pow函数。
long long int mypow(int a,int b) {
if(b == 0)
return 1;
if(b == 1)
return a;
if(b%2)
return (((a*mypow(a*a,b/2)))%(1000000007));
return((mypow(a*a,b/2))%(1000000007));
}
关于c++ - 使用大输入时输出错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36225115/