在线法官拒绝我的回答

Online judge Rejecting My Answer

本文关键字:我的 拒绝 在线      更新时间:2023-10-16

下一个回文

下面的代码是这个问题的解决方案

如果正整数在十进制系统中的表示形式在从左到右和从右到左读取时相同,则称为回文。对于不超过 1000000 位的给定正整数 K,将大于 K 的最小回文值写入输出。数字始终不带前导零。

输入

第一行包含整数 t,即测试用例的数量。整数 K 在接下来的 t 行中给出。

输出

对于每个 K,输出大于 K 的最小回文。

输入:28082133

输出:8182222

#include <iostream>
using namespace std;
int main()
{
 long t;
 cin>>t;
 long a[t],k;
 for(long i=0;i<t;++i)
{
    cin>>k;
    a[i]=k;
}
 for(long i=0;i<t;++i)
 {
    long palin=0,num;
    palin=a[i];
    num=palin+1;
    while(1)
    {
        long x=0,rev=0,ans=num;
        do
        {
            x=ans%10;
            rev=rev*10+x;
            ans=ans/10;
        }while(ans);  
        if(rev==num)
        {
            cout<<"n"<<rev<<"n";
            break;
        }    
        else
            ++num;
    }     
 }      
return 0;
}
代码

给了我预期的输出,我什至对代码进行了更改,使变量 K 和 t 为 LONG,我应该让它们长而不是长,还是我的逻辑有任何问题......?

您可以使用字符串而不是 long 来编写有效的程序。我已经用过了。在这里,我给出了代码:

#include<iostream>
using namespace std;
#include<string.h>
int main()
{
    char s[80];   //you can take any big index instead 80
    gets(s);
    int a=0,l=strlen(s);
    for(int i=0;i<l;i++) {
        if(s[i]==s[l-i]) {
            a++;
        }
    }
    if(a==l) {
        cout<<"Number is palindrome";
    }
    else {
        cout<<"Number is not palindrome";
    }
    return(0);
}

任务真的是处理多达 1,000,000 位的整数吗?还是输入小于1M?
"long"保证至少为 32 位长(因此无符号 long 可以容纳整数 [0, 4,294,967,295]。因此,如果您的输入是 1M <,您的保险箱只有常规的长。
"long long"保证至少为 64 位长,因此无符号 long long 的范围为 [0, 18x10^18]。大于 4M,但仍远小于 1M 十进制数字。

代码的另一个问题是,它看起来像您试图动态分配堆栈数组。

cin>>t;
long a[t],k;

不能提供变量作为数组大小。这是一个非常基本的C++点,您必须执行以下操作之一:

  1. 对数组使用常量编译时最大大小(最简单的解决方案)。

    #define A_MAX_SIZE 100
    long a[A_MAX_SIZE];
    
  2. 使用动态数组(但随后必须分配并稍后删除它)。
    请参阅链接:http://www.cplusplus.com/doc/tutorial/dynamic/

  3. 使用将为您处理内存的 STL 容器。
    例如:http://www.cplusplus.com/reference/stl/vector/vector/