我在SPOJ (一个编程难题网站)上尝试了一个问题,我需要生成大于给定数字的最小回文数。我试着用模数和整数除法计算回文的两个边来解决这个问题,但它仍然给出了错误的答案。会有什么问题呢?
#include <cmath>
#include <iostream>
using namespace std;
int inverse(int a){
int inv = 0;
while( a > 0){
inv = inv*10 + a%10;
a = a/10;
} // while
return inv;
} // inverse
int main(){
ios::sync_with_stdio(false);
int n;
cin >> n;
for(int i = 0; i < n; i++){
int a;
cin >> a;
int size = 0;
int tmp = a;
while(tmp > 0){
size++;
tmp/=10;
} // while
bool even = false;
int middle = size/2;
if(size%2==0)even = true;
if(!even)middle++;
int l = a/pow(10.0,size-middle);
int r = a%int(pow(10.0,middle));
int lr = inverse(l);
if(lr <= r){
l++;
lr=inverse(l);
} // if
if(!even)
lr%=int(pow(10.0,middle-1));
int wynik = l*pow(10.0,size-middle)+lr;
if(a==9)
wynik=11;
else if(a==0)
wynik = 1;
cout << wynik << endl;
} // for
return 0;
} // main发布于 2012-08-10 01:51:12
根据problem description的规定,您必须能够处理小于一百万位的任意大小的正整数。您的实现是基于int类型的,因此它只能处理最多九位数的数字(根据系统的INT_MAX设置几位数)。
示例输入:
1
100000000000000000000000000000000000000000示例输出:
-2147483648您的输出不正确。正确的输出是100000000000000000000000000000000000000001。
https://stackoverflow.com/questions/11886916
复制相似问题