C De Bir Soru (Palindromik Sayılar)
-
soru palindromik sayılar(sayının baştan ve sondan okunuşu aynı; örn:12344321) 8 basamaklı girilen sayının palindromik olup olmadığı bulunacak. ben kodları yazdım ama sadece sayı girişi kısmı işliyor kodun, gerisi gelmiyor, hata da vermedi, anlayamadım bi bakarsanız iyi olur:
#include<stdio.h>
#include<math.h>
#include<conio.h>
main()
{
int birler,onlar,yuzler,binler,onb,yuzb,mil,onmil;
long int sayi;
printf("8 basamakli bir sayi giriniz: ");
scanf("%ld\n",&sayi);
birler=sayi%10;
onlar=(sayi%100)/10;
yuzler=(sayi%1000)/100;
binler=(sayi%10000)/1000;
onb=(sayi%100000)/10000;
yuzb=(sayi%1000000)/100000;
mil=(sayi%10000000)/1000000;
onmil=(sayi/10000000);
sayi=birler+onlar*10+yuzler*100+binler*1000+onb*10000+yuzb*100000+mil*1000000+onmil*10000000;
if ((birler==onmil) && (onlar==mil) && (yuzler==yuzb) && (binler==onb))
printf("bu bir palindromik sayidir\n");
else
printf("palindromik sayi degildir\n");
getch();
}yardımcı olanlara teşekkürler.. ;)
-
#include<stdio.h>
#include<math.h>
main()
{
int birler,onlar,yuzler,binler,onb,yuzb,mil,onmil;
long int sayi;
printf("8 basamakli bir sayi giriniz: ");
scanf("%d",&sayi);
birler=sayi%10;
onlar=(sayi%100)/10;
yuzler=(sayi%1000)/100;
binler=(sayi%10000)/1000;
onb=(sayi%100000)/10000;
yuzb=(sayi%1000000)/100000;
mil=(sayi%10000000)/1000000;
onmil=(sayi/10000000);
sayi=birler+onlar*10+yuzler*100+binler*1000+onb*10000+yuzb*100000+mil*1000000+onmil*10000000;
if ((birler==onmil) && (onlar==mil) && (yuzler==yuzb) && (binler==onb))
printf("bu bir palindromik sayidir\n");
else
printf("palindromik sayi degildir\n");
}Bu şekilde çalışıyor ama
Palindrom olayı Stack'le yapılır, aklında bulunsun. Windows platformunda çalışıyorsan en sona
System("pause");
eklemen yeterli konsolun kapanmaması için.
Kolay gelsin.
-
sscheme, öncelikle windows ortamı ama system pause olayı hata verdi,ben yine include ve getch(); yaptım :)
2.si senin yaptığın düzeltmede benimkinden hiçbir farkı yok, tek fark ben
scanf("%ld\n",&sayi);
böyle yapmışım, sen;
scanf("%d",&sayi);
böyle yapmışsın. sayi değişkenini okuduktan sonra alt satıra geçmek için \n yazmak hatalı bi kullanımmıdır?
edit: stack ne bilmiyorum :)
-
basamakları birler hariç yanlış tanımlamışsın, scanf("%ld\n",&sayi); satırında \n kullanımı da hatalıymış...
system pause olayı için #include <stdlib.h> kullanman gerekiyor.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
long int birler,onlar,yuzler,binler,onb,yuzb,mil,onmil;
long int sayi;
printf("8 basamakli bir sayi giriniz: ");
scanf("%ld",&sayi);
birler=sayi%10;
onlar=(sayi/10)%10;
yuzler=(sayi/100)%10;
binler=(sayi/1000)%10;
onb=(sayi/10000)%10;
yuzb=(sayi/100000)%10;
mil=(sayi/1000000)%10;
onmil=(sayi/10000000)%10;
if ((birler==onmil) && (onlar==mil) && (yuzler==yuzb) && (binler==onb))
printf("bu bir palindromik sayidir\n");
else
printf("palindromik sayi degildir\n");
system("PAUSE");
return 0;
}çalışıyor...
bu da string kullanarak:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char num[8];
printf("8 basamakli bir sayi giriniz: ");
gets(num);
if ((num[0]==num[7]) && (num[1]==num[6]) && (num[2]==num[5]) && (num[3]==num[4]))
printf("bu bir palindromik sayidir\n");
else
printf("palindromik sayi degildir\n");
system("PAUSE");
return 0;
} -
oldwolf bunu yazdı:
-----------------------------
basamakları birler hariç yanlış tanımlamışsın, scanf("%ld\n",&sayi); satırında \n kullanımı da hatalıymış...
system pause olayı için #include kullanman gerekiyor.
#include
#include
#include
int main()
{
long int birler,onlar,yuzler,binler,onb,yuzb,mil,onmil;
long int sayi;
printf("8 basamakli bir sayi giriniz: ");
scanf("%ld",&sayi);
birler=sayi%10;
onlar=(sayi/10)%10;
yuzler=(sayi/100)%10;
binler=(sayi/1000)%10;
onb=(sayi/10000)%10;
yuzb=(sayi/100000)%10;
mil=(sayi/1000000)%10;
onmil=(sayi/10000000)%10;
if ((birler==onmil) && (onlar==mil) && (yuzler==yuzb) && (binler==onb))
printf("bu bir palindromik sayidir\n");
else
printf("palindromik sayi degildir\n");
system("PAUSE");
return 0;
}çalışıyor...
bu da string kullanarak:
#include
#include
#include
int main()
{
char num[8];
printf("8 basamakli bir sayi giriniz: ");
gets(num);
if ((num[0]==num[7]) && (num[1]==num[6]) && (num[2]==num[5]) && (num[3]==num[4]))
printf("bu bir palindromik sayidir\n");
else
printf("palindromik sayi degildir\n");
system("PAUSE");
return 0;
}
-----------------------------öncelikle teşekkürler:)
ama ben basamaklarda yanlışlık yaptığımı düşünmüyorum. hatamı da buldum sanırım, scanf de \n kullnılmıyormuş galiba alt satıra geçmek için printf("\n") yapmamız gerekiyormuş. 2. verdiğin çözüm daha iyi tabi ama biz daha onları öğrenmedik :)
-
C nin çalışma mantığını bilmem ama sadece 8 basamklı değilde başka basamak sayısında da yapmak için sayıyı aldıktan sonra
for döngüsüyle tersten yazdırıp karşılaştısan daha kolay olmaz mı?
-
Gereksiz kafa yormak istemiyorsan string olarak al sayıyı, toplam string uzunlugunun yarisina bol substr ile iki yarıyıda al, 2.yi reverse et eşitmi diye bak. Sonra bide sayımı diye bakarsın :)) Hem kac basamakli olduguda farketmez.
-
gVeR bunu yazdı:
-----------------------------
Gereksiz kafa yormak istemiyorsan string olarak al sayıyı, toplam string uzunlugunun yarisina bol substr ile iki yarıyıda al, 2.yi reverse et eşitmi diye bak. Sonra bide sayımı diye bakarsın :))
-----------------------------Yarıya bölmeye gerek var mı sence? :)
Direk tersini alıp karşılaştırma yapmak yeterli.. Öbür türlü tek haneli sayılarda sıkıntı çıkar :))
-
NmC bunu yazdı:
-----------------------------
gVeR bunu yazdı:
-----------------------------
Gereksiz kafa yormak istemiyorsan string olarak al sayıyı, toplam string uzunlugunun yarisina bol substr ile iki yarıyıda al, 2.yi reverse et eşitmi diye bak. Sonra bide sayımı diye bakarsın :))
-----------------------------Yarıya bölmeye gerek var mı sence? :)
Direk tersini alıp karşılaştırma yapmak yeterli.. Öbür türlü tek haneli sayılarda sıkıntı çıkar :))
-----------------------------ahahah, üzgünüm geç saatin etkisi :P, pali bilmemne sayınında ne olduğunu bilmem göz kararı söyledim öyle bi mantik, senin dedigin gibi yapsın :P
-
tutay bunu yazdı:
-----------------------------
C nin çalışma mantığını bilmem ama sadece 8 basamklı değilde başka basamak sayısında da yapmak için sayıyı aldıktan sonra
for döngüsüyle tersten yazdırıp karşılaştısan daha kolay olmaz mı?
-----------------------------olabalir sanki, aklıma gelmemişti bu.
-
#define ARR_LEN(p) (sizeof(p) / sizeof(*p))
int ispalindromic(int), getreverse(int);
int main(int argc, char **argv)
{
int n = 155;
printf("%d is %s number", n, ispalindromic(n) == 1 ? "palindromic" : "not palindromic" );
_getch();
return 0;
}
int ispalindromic(int n)
{
int rev = getreverse(n);
return rev == n;
}
int getreverse(int n)
{
int revNumb = 0;
for (; n > 0; n = n / 10)
{
revNumb *= 10;
revNumb += n % 10;
}
return revNumb;
}pelles c uzerinde yazdim derledim ;)