项目欧拉16 2 ^ 1000我得到了1319?

时间:2013-03-26 20:20:36

标签: c++

我检查了答案,但我的答案并没有太多关闭,但仍然是一个错误。有人可以检查我的编码,看看是什么错误导致我得到值1319?

#include <iostream>
#include <vector>
using namespace std;

int main()
{
int k = 0;
int o = 0;
vector<int> n(1,0);
n[0] = 1;
while (k < 1001)
{
    for (int l = 0; l < n.size(); l++)
        n[l] = n[l] * 2;
    for (int l = 0; l < n.size(); l++)
    {
        if (n[l] >= 1000000)
        {
            int m;
            if (l == n.size() - 1)
                n.resize(n.size() + 1);
            m = n[l] / 1000000;
            n[l] = n[l] % 1000000;
            n[l+1] = n[l+1] + m;
        }
    }
    k++;
}
for (int l = 0; l < n.size(); l++)
    o = o + int (n[l]/1000000) + int ((n[l] % 1000000) / 100000) + int ((n[l] % 100000) / 10000) + int ((n[l] % 10000) / 1000) + int ((n[l] % 1000) / 100) + int ((n[l] % 100) / 10) + n[l] % 10;
cout << o;
cin >> k;
return 0;

}

2 个答案:

答案 0 :(得分:1)

成功

while (k < 1000)

在外循环条件下。

while循环中,您首先在向量中使用值2^k的{​​{1}}表示进入循环。因此,您实际上是在计算k而不是2^1001

答案 1 :(得分:0)

在c ++中解决此问题的问题是数据类型限制,“int”不足以计算2 ^ 1000。 我已经解决了这个原型,即数字2 ^ 4的数字之和。功率2 ^ 4是16,数字之和是7。 希望代码指导你。

         #include<iostream.h>
         #include<conio.h>

         void main()
             {
                 int count=1;

           int power=1;
                 int sum=0;
   while(count<=4)
   {   count++;
   power=power*2;

    }
   cout<<"The power is"<<power<<"\t";

    while(power!=0)
     {
           int digit=power%10;
        sum=sum+digit;
        power=power/10;

     }


     cout<<"The sum of digits is"<<sum;
     getch();
    }