Я делал проблему с именем Sam and sub-strings на hackerrank, которую вы можете посмотреть, нажав соответствующую ссылку.Как удалить ошибку, связанную с модулем в вызове «Сэм и подстроки»?
Вот мой код. Я уверен, что логика моей программы верна, поскольку она работает для меньших значений (а также выборочных тестовых случаев). Проблема заключается в модуле, и я не могу получить, как правильно использовать модуль в этой программе. Может ли кто-нибудь помочь мне (если возможно, сообщите, когда/где использовать модуль в программе без редактирования остальной части моей программы)? Мое представление дает правильные результаты для testcases 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». –
Вы можете устранить вызовы 'pow', поддерживая переменную, которая умножается на 10 в каждом цикле. Это улучшит производительность вашего кода и онлайн-судей, время - фактор. –
Как правило, если есть модульная арифметика, не может быть также и плавающая точка 'pow'. – harold