我试图解决的问题是找到1000位数字中具有最大产品的十三个相邻数字..我想弄清楚当我尝试阅读超过8时。看起来它不是'再跑了。 现在我得到2145402160的值,但我想读13个值。有人能告诉我我做错了什么吗? test.txt文件是
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
#include<stdio.h>
int main()
{
int a,b,c,d,e,g,h,j,k,l,m,n,o,p;
unsigned long long f;
unsigned long long max = 0;
FILE *fp;
fp=fopen("/Users/desktop/test.txt","r");
fscanf(fp,"%1d",&a);
fscanf(fp,"%1d",&b);
fscanf(fp,"%1d",&c);
fscanf(fp,"%1d",&d);
fscanf(fp,"%1d",&e);
fscanf(fp,"%1d",&h);
fscanf(fp,"%1d",&j);
fscanf(fp,"%1d",&k);
fscanf(fp,"%1d",&l);
fscanf(fp,"%1d",&m);
fscanf(fp,"%1d",&n);
fscanf(fp,"%1d",&o);
for(int i=13;i<=1000;i++)
{
fscanf(fp,"%1d",&p);
f=a*b*c*d*e*h*j*k*l*m*n*o*p;
if(max<f)max=f;
a=b;
b=c;
c=d;
d=e;
e=h;
h=j;
j=k;
k=l;
l=m;
m=n;
n=o;
o=p;
}
printf("%lld\n",max);
return 0;
}
答案 0 :(得分:4)
在这一行:
f=a*b*c*d*e*h*j*k*l*m*n*o*p;
所有右侧都是整数,因此您会得到整数溢出。您需要以长的精度进行乘法运算,例如:
f= 1ULL * a*b*c*d*e*h*j*k*l*m*n*o*p;
另外(现在你已经改为使用unsigned long long)你还需要更新格式字符串以打印结果:
printf("%llu\n", max);