【发布时间】:2017-02-14 20:03:10
【问题描述】:
我在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;
}
【问题讨论】:
-
您是否考虑过将数字保留为文本字符串?您可以使用数组表示法获取数字。您可以通过减去
'0'将数字转换为数字。 -
您可以通过在每个循环中维护一个乘以 10 的变量来消除对
pow的调用。这将提高代码的性能,并且对于在线评委来说,时间是一个因素。 -
作为一般的经验法则,如果有模运算,就不可能有浮点
pow。 -
@harold 我正在通过类型转换将浮点 pow 转换为 long long int。所以这不是问题。
-
@user3774008 这次肯定不是问题,只是因为指数很小。不过,这里没有理由使用它,而且一般来说,即使尝试也是危险的。
标签: c++ algorithm dynamic-programming modulus