problema eliminare cifra de mijloc

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
stelian_2681
Junior
Junior
Posts: 36
Joined: 24 Jun 2013, 23:25
Judet: Olt

problema eliminare cifra de mijloc

Post by stelian_2681 » 26 Jun 2013, 09:30

La urmatoare problema nu inteleg ce se intampla in linia 28.
Enuntul problemei:

Se citeste un numar strict mai mare decat 9 avand numar impar de cifre.
Sa se afiseze numarul obtinut prin eliminarea cifrei de mijloc a numarului initial.

Eroarea apare in linia 28 : x=pow(10,cnt);
unde cnt este 2 si x ar trebui sa fie 100, numai ca la o rulare a codului cu debugger-ul x=99.
Nu inteleg unde gresesc.
Astept sugestii.

Code: Select all

 1  #include <iostream>
 2  #include <math.h>
 3  using namespace std;
 4  
 5  int main()
 6  {
 7      int nr, rest, cnt=0, m, var1, var2, x, y, z, q;
 8      label:
 9          cout<<"\n Introduceti nr = ";
10          cin>>nr;
11      m=nr;
12      if(nr>9)
13      {
14          while(nr!=0)
15              {
16                  rest=nr%10;
17                  cnt++;
18                  nr=nr/10;
19              }
20      }
21      else
22          goto label;
23      if(cnt%2!=0)
24      {
25          cnt=cnt/2;
26          z=pow(10,(cnt+1));
27          var1=m/z;
28          x=pow(10,cnt);
29          var2=m%x;
30          y=var1*x+var2;
31          cout<<"\n "<<y<<endl;
32      }
33      if(cnt%2==0)
34          cout<<"\n Numarul cifrelor este par "<<endl;
35      return 0;
36  }
Last edited by Marius Bancila on 26 Jun 2013, 14:20, edited 1 time in total.
Reason: code tags



User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: problema eliminare cifra de mijloc

Post by Marius Bancila » 26 Jun 2013, 14:30

pow(10,2) returneaza un double. Reprezentarea in virgula flotanta nu e una exacta, ci aproximativa si poate fi 99.9999998 sau ceva degenul. Cand convertesti inapoi la intreg, se pierde partea de dupa virgula si ramai doar cu 99.

Pentru mai multe informatii despre asta vezi http://stackoverflow.com/questions/9704 ... 9-999-in-c.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Post Reply