Как заставить мой код работать для больших значений N? - PullRequest
0 голосов
/ 02 апреля 2020

Ввод состоит из строки, за которой следует N. Строка состоит не более чем из 30 символов верхнего регистра и N≤10 18 . Код выводит N-й символ бесконечного кода, созданного из начальной строки. Первый символ - N = 1.

Последний символ строки перемещается на первую позицию, а затем результирующая строка добавляется к предыдущей строке в каждой итерации.

SAMPLE INPUT:

COW 8

ВЫБОР ОБРАЗЦА:

C

В этом примере начальная строка COW расширяется следующим образом:

COW -> COWWCO -> COWWCOOCOWWC

                 12345678

Проблема заключается в том, что для больших значений N eg.10 7 , код вылетает. Может кто-нибудь, пожалуйста, предложите методы для устранения ошибки.

#include<bits/stdc++.h>
using namespace std;

char sCowCode(string str, long long int N){

    long long int a = str.length();

    if(N < a){
        return str[N-1];
    }

    while(2*a < N + 1)
        a *= 2;

    if(a == N)
        return sCowCode(str, a-1);

    return sCowCode(str, N - a -1);
}



int main(){

    long long int N;
    string str;

    cin >> str;
    cin >> N;


    char a = sCowCode(str, N);

    cout<<a<<endl;
    cin.get();
    cin.get();

    return 0;
}
...