- 70
- 2
- CPU
- intel core i5-2310m
- HDD
- 1TB Western digital 5400rpm
- RAM
- 8gb ddr3
- GPU
- amd ati 7310m
- Monitor
- samsung E2220
- OS
- Windows 7; ubuntu 14.04; Kali linux; debian 7
Dato un numero N da tastiera stampare in output il numero Nmax-Nmin, dove Nmax e Nmin sono, rispettivamente, il massimo ed il minimo ottenibile con le singole cifre di N.
Es: per N=12345.
Nmax=54321, Nmin=12345
output: 54321-12345=41976
Es: per N=12345.
Nmax=54321, Nmin=12345
output: 54321-12345=41976
Ma se N ha più di 10 cifre da problemi (con 11 o + cifre nemmeno compila)
Se ad esempio come N inserisco: 1234556789 (10 cifre)
in output da: 988755531-135557889
Il codice che ho scritto è questo:
Codice:
#include <iostream>
#include <vector>
#include <algorithm> //funzione sort
using namespace std;
int main()
{
int n; //numero in input
cin>>n;
vector<int>Nmax; //vettore per memorizzare singole cifre
vector<int>Nmin; // " " " "
/* ricavo le cifre: */
int x=10;
while(n>=x)
{
x*=10;
}
x/=10;
int cifra=0;
while(x>=1)
{
cifra=n/x;
n-=cifra*x;
x/=10;
Nmax.push_back(cifra); //memorizzo cifre nel vettore
Nmin.push_back(cifra); // " " "
}
/* ordino i vettori, uno in modo decrescente e l'altro in modo crescente */
sort(Nmax.begin(), Nmax.end(), greater<int>());
sort(Nmin.begin(), Nmin.end());
int N_max=0; //variabile su cui eseguire la sottrazione
int N_min=0; // " " " "
/* copio i vettori nelle due variabili: */
for (int k=0; k<Nmax.size(); k++)
{
int num=Nmax[k];
if (num!=0)
{
while (num>0)
{
N_max*=10;
num/=10;
}
N_max+=Nmax[k];
}
else
{
N_max*=10;
}
}
for (int r=0; r<Nmin.size(); r++)
{
int num2=Nmin[r];
if (num2!=0)
{
while (num2>0)
{
N_min*=10;
num2/=10;
}
N_min+=Nmin[r];
}
else
{
N_min*=10;
}
}
/* sottraggo N_max e N_min: */
cout<<N_max<<"-"<<N_min<<endl;
cout<<N_max-N_min;
return 0;
}