本地测试没问题,但就是过不了π_π
查看原帖
本地测试没问题,但就是过不了π_π
190414
BigStar楼主2021/9/28 20:52
#include <iostream>
#include <map>
#include <stdio.h>
using namespace std;

char num[101] = {'0'};
char tempSum[101] = {'0'};
int numLen = 0;
int minLen = 0;
map<char, int> value;

int addOption(int base){
    for(int i = numLen - 1; i>=0; --i){
        if(num[i] != '0'){
            break;
        }
        --minLen;
    }
    for(int i = 0; i < minLen; ++i){
        tempSum[i + 1] = (value[num[i]] + value[num[minLen - i - 1]] + value[tempSum[i]]) / base + tempSum[i + 1];
        int v= (value[num[i]] + value[num[minLen - i - 1]] + value[tempSum[i]]) % base;
        if(v >= 10){
            tempSum[i] = 10 - v + 'A';
        } else {
            tempSum[i] = v + '0';
        }
        
    }
    if(tempSum[numLen] != '0'){
        ++numLen;
    }
    minLen = numLen;
    for(int i = 0; i < numLen; ++i){
        num[i] = tempSum[i];
        tempSum[i] = '0';
    }
    for(int i = numLen - 1, j = 0; j < i; ++j, --i){
        if(num[i] != num[j]){
            return 1;
        }
    }
    return 0;
}

int main(){
    int n;
    scanf("%d \n", &n);
    char c;
    for(int i = 0; i <101; ++i){
        num[i] = '0';
        tempSum[i] = '0';
    }
    while ((c = getchar()) != '\n')
    {
        num[numLen++] = c;
    }
    minLen = numLen;
    for(int i = 0; i < 16; ++i){
        if(i >= 10){
            value.insert(pair<char, int >((i - 10) + 'A', i));
            continue;
        }
        value.insert(pair<char, int >('0' + i, i));
    }
    bool b = true;
    for(int i = numLen - 1, j = 0; j < i; ++j, --i){
        if(num[i] != num[j]){
            b = false;
        }
    }
    if(b){
        cout << "STEP=1";
            return 0;
    }
    for(int i = 1; i <= 30; ++i){
        if(!addOption(n)){
            cout << "STEP=" << i;
            return 0;
        }
    }
    cout << "Impossible!";
    return 0;
}

有没有大佬指点迷津π_π

2021/9/28 20:52
加载中...