Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Palindrom in baza 16  (Citit de 1335 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
mircea2011
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 14



Vezi Profilul
« : Februarie 13, 2012, 22:46:48 »

Salut.
Am nevoie de putin ajutor la urmatoarele doua probleme.

1. Sa se verifice daca un numar n este palindrom in baza 16. Numarul este introdus in baza 10.

Ex : numarul introdus 111281
in interiorul buclei while obtin : 1B2B1
dupa inversarea tabloului : 1B2B1, practic echivalentul in haxazecimal al numarului 2525.
dupa aceea ar trebui sa compar elementele celor doua tablouri : tab == tab[k].

am incercat si cealalta varianta a =a*10 + tab
b =b*10 + tab[k]
dupa care compar a==b
tot nu functioneaza.

#include<stdio.h>
#define p 30

int main()
{
    int n, n10, i, j, k, tab[p], A;
    printf("\n Introduceti n10 = ");
    scanf("%d", &n10);
    printf("\n");
    i=0; n=n10;
    while(n10)
    {
        tab = n10%16;
        n10/=16;
        i++;
    }
    j=i-1;
    printf(" Numarul %d in haxazecimal : ", n);
    for(k=j; k>=0; k--)
    printf(" %X", tab[k]);
    printf("\n");
}

2. Sa se afiseze primele n numere care au suma cifrelor mai mica sau egala cu m.

Ex : pentru n=20 si m=4 se vor afisa : 1, 2, 3, 4, 10, 11, 12, 13, 20, 21.

#include<stdio.h>

int main()
{
    int m, n, a, b, c, s, i;
    printf("\n Dati n = ");
    scanf("%d", &n);
    printf("\n Dati m = ");
    scanf("%d", &m);
    printf("\n");
    i=1;
    for(; i<=n; )
    {
        a=c; c+=1; s=0;
        while(a)
        {
            b=a%10;
            s+=b;
            a/=10;
        }
        if(s<=m)
        {
            printf(" %d", s);
            i++;
        }
        c++;
    }
    printf("\n");
}
Memorat
BeilandArnold
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #1 : August 24, 2012, 01:04:28 »

Idee pentru problema 1: nu transform numarul in baza 16, ci folosesc operatii pe biti + proprietatea ca o cifra in baza 16 reprezinta 4 cifre in baza 2.
Cod:
//...presupun ca n este de tip int (pe 32 biti).
#include <iostream>
using namespace std;

int main(){
cout<<"Numarul in baza 10: ";
int n;
cin>>n;
if(n<0) n=-n; //presupun ca semnul nu conteaza

int rev=0;
for(int i=0; i<=32 && n>>i; i+=4)
(rev<<=4) |= (n>>i)&15;   //adaug grupurile de cate 4 biti

if(n==rev) cout<<"Numarul este palindrom in baza 16.\n";
else cout<<"Numarul nu e palindrom in baza 16.\n";

cout<<"Apasa ENTER...";
cin.get();
cin.get();
}
« Ultima modificare: August 24, 2012, 08:31:18 de către Beiland Arnold » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines