Dev - C++ - Convierte los números 1000 pa arriba con sufijos "K" - problemas a partir de los billones

 
Vista:
Imágen de perfil de Gran

Convierte los números 1000 pa arriba con sufijos "K" - problemas a partir de los billones

Publicado por Gran (6 intervenciones) el 01/08/2016 02:13:15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<windows.h>
using namespace std;
int main(){
long int num;
while(1){
	system("cls");
	cout<<"To terminate the program put a negative number\nPut any number: ";cin>>num;
	if(num>=1000){
		cout<<"\n\nThe number is "<<num/1000<<"K\n";
		system("pause");
	}else if(num<0){
		system("pause");
		return 0;
	}else{
		cout<<num<<"\n";
		system("pause");
	}
}//Mi sistema tiene bugs a partir de los 2 billones(billones del español) 	
}//...Creo que los problemas son por falta de memoria talvez...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Convierte los números 1000 pa arriba con sufijos "K" - problemas a partir de los billones

Publicado por Ulides (1 intervención) el 07/08/2016 16:00:02
El problema es que 2 billones puede exceder los bits en memoria (long int), puedes intentar con long long. Aunque sería más eficiente si leyeras el número como un string(cadena) y crees una función que detecte si al final de la cadena hay "000" y eso lo transformas a "K"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
string myfunc(string num){
      int cnt=0;
 
      /*Analizamos si en la cadena al final hay "000"       mientras eso pase acortamos la cadena num y aumentamos el contador que indica cuantos K*/
 
      string aux=num.substr((int)num.size()-3,3);
      while(aux=="000"){
            num=num.substr(0,(int) num.size()-3);
            aux=num.substr((int)num.size()-3,3);
            cnt++;
      }
     string especial="K";
     for(int i=0;i<cnt;i++) num+=especial;
     return num;
}
 
int main(){
     string num;
     cinn>>num;
     num=myfunc(num);
     cout<<num;
     return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar