Ввод состоит из строки, за которой следует 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;
}