我在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/