Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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/

10-11 22:09
查看更多