使用大输入时输出错误
Wrong output when using a large input
好吧,这是我试图从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));
}
相关文章:
- 输出错误,问题是找到总和5000位数字cpp
- 使用复制构造函数的程序输出错误
- 异或字符串加密/解密输出错误
- 在linux上使用g++输出错误,在windows上更正
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- ECDSA 密钥对生成输出错误
- fscanf() 输出错误的值
- 输入 1024 后十进制到二进制转换的输出错误?
- 输出错误命令的条件语句
- cuSparse (cusparseDcsrgemm) 中的矩阵乘法输出错误的结果
- 为什么 du -sh 输出错误大小的内存映射文件
- VS2017 的输出错误,但 mingw 有效
- 如何使FFMPEG C 代码不输出错误消息
- 乘以时输出错误.这是我编译器中的错误吗?C
- 输出错误:两个不同编译器上的不同输出:Prime Cryptarithm USACO
- 为什么输出错误崩溃
- C++输入/输出错误
- 尝试用 c++ 制作一个简单的加法器.编译成功,但输出错误
- 当我使用此合并排序代码运行时,输出错误
- 递归功能输出错误的值