Już wyjaśniam o co chodzi. Potrzebuję wyświetlać cyfry z przedziału 1-1mln w siedmiu znakach. tj jeżeli cyfra jest mniejsza od miliona to od lewej od jej wartości powinny zostać zera, tak by wypełniały 7 pól.
Np cyfra 553, powinna być zapisana jako 0000553, cyfra 3030 jako 0003030 itd. Mama pytanko. Czy jest jakaś biblioteka w C/C++ która taki zapis realizuje, lub istnieje jakiś "sprytny" i szybki sposób by takie coś osiągnąć? Bo tak na pierwszy rzut oka pozostają boje z if-ami, ktore będą sprawdzać, wartości pomiędzy 10,100,1000,10000 i w zależności od tego przypisywanie wszystko do stringa plus dodanie różnej ilości "0" do końcowego wyrażenia.
0
0
Hasło do wyszukiwania - pad left.
0
Saalin napisał(a):
Hasło do wyszukiwania - pad left.
Dzięki, skorzystalem ostatecznie z setfill i setw
0
Udało się Programik działa i wypisuje prawidłowo format:
int main(int argc, char **argv)
{
int i,ile_zer,liczba,temp;
string wynik;
cin>>liczba;
if(liczba==1000000)
{
wynik="1000000";
std::cout<<wynik<<endl;
}
else
{
if(liczba<10)
{
ile_zer=6;temp=1;
}
else if(liczba>=10 && liczba<100)
{
ile_zer=5; temp=2;
}
else if(liczba>=100 && liczba<1000)
{
ile_zer=4; temp=3;
}
else if(liczba>=1000 && liczba<10000)
{
ile_zer=3; temp=4;
}
else if(liczba>=10000 && liczba<100000)
{
ile_zer=2; temp=5;
}
else
{
ile_zer=1; temp=6;
}
std::cout<<std::setfill('0')<<std::setw(ile_zer+temp)<<liczba;
}
return 0;
}
5
Kawał "dobrej", nikomu nie potrzebnej roboty, jeśli rozwiązaniem jest
std::cout<<std::setfill('0')<<std::setw(7)<<liczba;
Jak to wykoncypowałeś z podanego linka? Tam wszystko jest prawidłowo.
0
ZrobieDobrze napisał(a):
Kawał "dobrej", nikomu nie potrzebnej roboty, jeśli rozwiązaniem jest
std::cout<<std::setfill('0')<<std::setw(7)<<liczba;
Jak to wykoncypowałeś z podanego linka? Tam wszystko jest prawidłowo.
Potrzebuję wartości powyższych zmiennych (ile_zer i temp ) do dalszych działań. Przy okazji sprawdziłem czy dobrze są wyliczone.
4
Użyj std::log10
z std::floor
, nie będziesz musiał mieć drabinki if
ów.
0
floor(log10(n)+1) or int(log10(n)+1)
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
for(size_t n{0},l{0},s{7};(cout<<"Enter num: ")&&(cin>>n)&&(l=floor(log10(n)+1));
cout<<setfill('0')<<setw(s)<<n<<" \t\t filled: ",(l<s?(cout<<(s-l)):(cout<<log2(1))),
cout<<" entered: "<<l<<" digits",cout<<(char)(0x0A)<<(char)(0x0A)){}
return log10(1);
}
1
std::to_string(liczba).length()