我在hackerrank上做了一个名为Sam and sub-strings的问题,你可以点击相应的链接来查看。
这是我的密码。我确信我的程序逻辑是正确的,因为它适用于较小的值(以及示例测试用例)问题是模数,我无法得到如何在这个程序中正确使用模数有人能帮我一下吗(如果可能的话,请告诉我何时/何地在程序中使用模数,而不必编辑我的程序的其余部分)?
我的提交给出了测试用例0、1、2、3、12的正确结果,其余的则给出了错误结果。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    long long int n;
    cin >> n;

    vector<long long int> v1;
    while (n!=0){
        v1.push_back(n%10);
        n=n/10;
    }

    long long int x=1,s1=0,sum=0;
    for (long long int i=v1.size()-1;i>=0;i--){
        s1+=x*v1[i];
        x++;
        sum=(sum+(s1*(long long int)pow(10,i))%1000000007)%1000000007;
    }

    cout << sum << endl;
    return 0;
}

最佳答案

我建议你在玩数字游戏时把数字当作文本。

int main()
{
  std::string number_as_text;
  std::cin >> number_as_text;

  long long sum = 0;
  const std::string::size_type length = number_as_text.length();
  for (unsigned int index = 0; index < length; ++index)
  {
      long long s1 = (number_as_text[index] - '0') * (index + 1);
      sum = sum * 10 + s1;
  }
  return 0;
}

如果需要的话,你必须找出mod 1000000007在程序中的位置。
另外,我建议在代码中放置错误处理,特别是在读取数字时。函数std::isdigit看起来很有用。

关于c++ - 如何消除挑战“Sam and sub-strings”中与模量有关的误差?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42235189/

10-12 04:18