简体   繁体   English

在C ++中获取负数

[英]Getting negative numbers in C++

The question I am trying to solve is Find the thirteen adjacent digits in the 1000-digit number that have the greatest product.. I am trying to figure out when i try to read more than 8. It seems like it isn't running anymore. 我要解决的问题是在1000位数字中找到具有最大乘积的13位相邻数字。.我试图弄清楚何时尝试读取8以上的数字。似乎它不再运行了。 。 Right now I get the value of 2145402160 but I want to read 13 values. 现在,我得到的值是2145402160,但是我想读取13个值。 Can someone tell me what I am doing wrong? 有人可以告诉我我在做什么错吗? test.txt file is 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;
}

On this line: 在这行上:

f=a*b*c*d*e*h*j*k*l*m*n*o*p;

all of the right hand side are ints, so you get integer overflow. 右侧的所有整数都是整数,因此您会得到整数溢出。 You need to do the multiplication in long long precision, eg: 您需要长时间精确地进行乘法,例如:

f= 1ULL * a*b*c*d*e*h*j*k*l*m*n*o*p;

Also (now that you have changed to using unsigned long long) you also need to update the format string for printing the result: 另外(现在您已经更改为使用unsigned long long),您还需要更新格式字符串以打印结果:

printf("%llu\n", max);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM