首页 > 解决方案 > 如何让我的代码适用于较大的 N 值?

问题描述

输入由后跟 N 的字符串组成。该字符串最多包含 30 个大写字符,并且 N≤10 18。该代码输出从初始字符串构建的无限代码的第 N 个字符。第一个字符是 N=1。

字符串的最后一个字符移动到第一个位置,然后在每次迭代中将结果字符串附加到前一个字符串。

样品输入:

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;
}

标签: c++c++14

解决方案


推荐阅读