在线法官拒绝我的回答
Online judge Rejecting My Answer
下一个回文
下面的代码就是解决这个问题的方法
如果从左到右和从右到左读取时正整数在十进制中的表示相同,则称为回文。给定一个不超过1000000位的正整数K,写出大于K的最小回文的值输出。显示的数字始终不带前导零。
输入
第一行包含整数t,测试用例的数量。在接下来的 t 行中给出了整数 K。
输出
对于每一个K,输出大于K的最小回文
例子
输入:
2个
808
2133
输出:
818
2222
#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 而不是 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 位长(因此无符号长整数可以容纳整数 [0, 4,294,967,295]。因此,如果您的输入小于 1M,则您的保险箱只有普通长整数。
"long long" 保证至少有 64 位长,所以 unsigned long long 的范围是 [0, 18x10^18]。大于 4M 但仍远小于 1M 十进制数字。
您的代码的另一个问题是您似乎在尝试动态分配堆栈数组。
cin>>t;
long a[t],k;
您不能提供变量作为数组大小。这是一个非常基本的 C++ 点,您必须执行以下操作之一:
为数组使用常量编译时最大大小(最简单的解决方案)。
#define A_MAX_SIZE 100
long a[A_MAX_SIZE];
使用动态数组(但之后必须分配和删除它)。
参见 link:http://www.cplusplus.com/doc/tutorial/dynamic/
使用将为您处理内存的 STL 容器。
例如:http://www.cplusplus.com/reference/stl/vector/vector/
下一个回文
下面的代码就是解决这个问题的方法
如果从左到右和从右到左读取时正整数在十进制中的表示相同,则称为回文。给定一个不超过1000000位的正整数K,写出大于K的最小回文的值输出。显示的数字始终不带前导零。
输入
第一行包含整数t,测试用例的数量。在接下来的 t 行中给出了整数 K。
输出
对于每一个K,输出大于K的最小回文
例子
输入: 2个 808 2133
输出: 818 2222
#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 而不是 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 位长(因此无符号长整数可以容纳整数 [0, 4,294,967,295]。因此,如果您的输入小于 1M,则您的保险箱只有普通长整数。
"long long" 保证至少有 64 位长,所以 unsigned long long 的范围是 [0, 18x10^18]。大于 4M 但仍远小于 1M 十进制数字。
您的代码的另一个问题是您似乎在尝试动态分配堆栈数组。
cin>>t;
long a[t],k;
您不能提供变量作为数组大小。这是一个非常基本的 C++ 点,您必须执行以下操作之一:
为数组使用常量编译时最大大小(最简单的解决方案)。
#define A_MAX_SIZE 100 long a[A_MAX_SIZE];
使用动态数组(但之后必须分配和删除它)。
参见 link:http://www.cplusplus.com/doc/tutorial/dynamic/使用将为您处理内存的 STL 容器。
例如:http://www.cplusplus.com/reference/stl/vector/vector/