2013-05-28 3 views
0
#include<stdio.h> 

int main(void) 
{ 
int rev=0,temp=0,frwd,n,ans=0; 
int i,j; 
    for(i=100;i<=999;i++) 
    { 
     for(j=i;j<=999;j++) 
     { 
      n = i*j; 
     frwd = n; 
     while(n!=0) 
     { 

      temp = n%10; 
      n = n/10; 
      rev = temp+rev*10; 

     }  
     printf("%d",rev);  
     if((rev == frwd)&&(ans<frwd)) 
     { 
      ans=frwd; 
      printf("%d",ans); 
     } 
     } 
    } 
return(0); 
} 

Я пробовал все, но этот код, похоже, не дает правильного вывода. Желаемый результат - это наибольшее число палиндрома из 6 цифр. Если я запускаю отдельные части, то есть обратное число, проверяя число, независимо от того, является ли это палиндром или петлями for, они работают нормально, но в программе они дают мусор в качестве вывода. Любая помощь будет оценена по достоинству.палиндром числа в C

+0

Что отладки вы пытались до сих пор? –

+3

Самый большой 6-значный палиндром - '999999', правильно? Зачем вам нужна программа? –

+2

Проблема с инициализацией 'rev'. Вы их повторно инициализируете каждый раз. Попробуйте добавить 'rev = 0;' во внутренний цикл 'for'. Вам нужно проверить максимальный уровень всех этих палиндромов? Или как @CarlNorum указал, что это '999999' –

ответ

2

ya проблема в том, что вы не повторно инициализируете rev до 0, как сказано cowanother.anon.ard. Попробуйте положить rev = 0 во внутренний цикл.

Но вы не можете получить 999999 как наивысший номер палиндрома из 6 цифр своим методом, так как u не проверяет все шестизначные числа.

1

4 проблемы с вашим кодом: -

  1. Как another.anon.coward сказал- вам нужно положить rev=0 внутри внутреннего цикла

  2. Вы должны отделить каждый номер, напечатанный либо пробелом или новой строки ('\ n') printf("\n %d");. В противном случае они будут выглядеть как одно большое количество (мусор).

  3. Ваш алгоритм также неверен. Согласно вашей программе, наибольшее 6-значное число - 906609 (правильный ответ - 999999). Для этого вы должны изменить свой внутренний цикл на j=0;j<999;j++ и сменить n=i*j на n=i*1000+j.

  4. Также перемещайте printf("\n%d",ans); вне цикла.

Скорректированная программа:

#include <stdio.h> 

    int main(void) 
    { 
    int rev=0,temp=0,frwd,n,ans=0; 
    int i,j; 
    for(i=100;i<=999;i++) 
    { 
     for(j=0;j<=999;j++) /*CORRECTED THIS LINE,*/ 
     { rev=0;/*ADDED THIS LINE;*/ 
      n = (i*1000) + j; /*CORRECTED THIS LINE*/ 
      frwd = n; 
      while(n!=0) 
      { 

       temp = n%10; 
       n = n/10; 
       rev = temp+rev*10; 

      }  
      printf("\n%d",rev); /*THIS LINE,*/ 
      if((rev == frwd)&&(ans<frwd)) 
      { 
       ans=frwd; 
      } 
     } 
    } 
    printf("\n%d",ans); /* AND THIS LINE*/ 

    return(0); 
    } 
+0

Почему 2 цикла? В этом методе происходит потеря времени вычисления. Итак, цикл от 100000 до 999999. – nbbk

+0

Просто придерживайтесь его логики, чтобы он мог понять, где он поступил не так. Он может научиться улучшать производительность позже. – nedR

+2

Это похоже на то, что проблема была ошибочной, и что OP должен найти самый большой палиндром, который является продуктом двух целых чисел. Конечно, поскольку он на самом деле не спрашивал *, что этот ответ по-прежнему так же корректен, как и любой другой ... – cHao

2
#include<stdio.h> 

int main(void) 
{ 
int rev=0,temp=0,frwd,n,ans=0; 
int i,j; 
for(i=100000;i<=999999;i++) 
{ 

    frwd = n = i; 
    rev = 0; 
    while(n!=0) 
    { 

     temp = n%10; 
     n = n/10; 
     rev = temp+rev*10; 

    } 
    if((rev == frwd)&&(ans<frwd)) 
    { 
     ans=frwd; 
    } 

} 
printf("%d\n",ans); 
return(0); 
} 
+0

Как я уже указал, этот код мне не пригодится. Мне нужно найти палиндром продукта не только на 6-значном палиндроме. В любом случае! –

0
#include <stdio.h> 

int main(void) 
{ 
int rev=0,temp=0,frwd,n,ans=0; 
int i,j; 
for(i=100;i<=999;i++) 
{ 
    for(j=0;j<=999;j++) /*CORRECTED THIS LINE,*/ 
    { rev=0;/*ADDED THIS LINE;*/ 
     n = (i*1000) + j; /*CORRECTED THIS LINE*/ 
     frwd = n; 
     while(n!=0) 
     { 

      temp = n%10; 
      n = n/10; 
      rev = temp+rev*10; 

     }  
     printf("\n%d",rev); /*THIS LINE,*/ 
     if((rev == frwd)&&(ans<frwd)) 
     { 
      ans=frwd; 
     } 
    } 
} 
printf("\n%d",ans); /* AND THIS LINE*/ 

return(0); 
} 
+2

некоторые информация пожалуйста ... –

Смежные вопросы