使用大输入时输出错误

Wrong output when using a large input

本文关键字:输出 错误 输入      更新时间:2023-10-16

好吧,这是我试图从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 housesn");
    scanf("%d",&numberofhouses);
//  printf("enter kn");
    scanf("%d",&k);
//  printf("enter distancen");
    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));
}