Ik probeer een manier te vinden om de lengte van een geheel getal (aantal cijfers) te vinden en deze vervolgens in een geheeltallige array te plaatsen. De opdracht roept ook op om dit te doen zonder het gebruik van klassen van de STL, hoewel de programmaspecificatie zegt dat we “gewone C-bibliotheken” kunnen gebruiken (ik zal mijn professor vragen of ik cmath kan gebruiken, omdat ik aanneem log10(num) + 1 is de gemakkelijkste manier, maar ik vroeg me af of er een andere manier was).
Ah, en dit hoeft geen negatieve getallen te verwerken. Alleen niet-negatieve getallen.
Ik probeer een variant “MyInt”-klasse te maken die een groter bereik aan waarden aankan met behulp van een dynamische array. Alle tips worden op prijs gesteld! Bedankt!
Antwoord 1, autoriteit 100%
Het aantal cijfers van een geheel getal n
in een willekeurige basis wordt triviaal verkregen door te delen totdat je klaar bent:
unsigned int number_of_digits = 0;
do {
++number_of_digits;
n /= base;
} while (n);
Antwoord 2, autoriteit 76%
Niet noodzakelijk de meest efficiënte, maar wel een van de kortste en meest leesbare in C++:
std::to_string(num).length()
Antwoord 3, autoriteit 50%
Er is een veel betere manier om het te doen
#include<cmath>
...
int size = trunc(log10(num)) + 1
....
werkt voor int en decimaal
Antwoord 4, autoriteit 35%
Als je C-bibliotheken kunt gebruiken, is een methode om sprintfte gebruiken, bijvoorbeeld
#include <cstdio>
char s[32];
int len = sprintf(s, "%d", i);
Antwoord 5, Autoriteit 21%
“Ik bedoel het aantal cijfers in een geheel getal, d.w.z.” 123 “heeft een lengte van 3”
int i = 123;
// the "length" of 0 is 1:
int len = 1;
// and for numbers greater than 0:
if (i > 0) {
// we count how many times it can be divided by 10:
// (how many times we can cut off the last digit until we end up with 0)
for (len = 0; i > 0; len++) {
i = i / 10;
}
}
// and that's our "length":
std::cout << len;
Uitgangen 3
Antwoord 6, Autoriteit 12%
Gesloten formule voor de langste int
(ik gebruikte int
hier, maar werkt voor elk ondertekend integraal type):
1 + (int) ceil((8*sizeof(int)-1) * log10(2))
Uitleg:
sizeof(int) // number bytes in int
8*sizeof(int) // number of binary digits (bits)
8*sizeof(int)-1 // discount one bit for the negatives
(8*sizeof(int)-1) * log10(2) // convert to decimal, because:
// 1 bit == log10(2) decimal digits
(int) ceil((8*sizeof(int)-1) * log10(2)) // round up to whole digits
1 + (int) ceil((8*sizeof(int)-1) * log10(2)) // make room for the minus sign
Voor een int
type 4 bytes, het resultaat is 11. Een voorbeeld van 4 bytes int
met 11 decimale cijfers is: “-2147483648”.
Als u het aantal decimale cijfers van sommige int
waarde wilt, kunt u de volgende functie gebruiken:
unsigned base10_size(int value)
{
if(value == 0) {
return 1u;
}
unsigned ret;
double dval;
if(value > 0) {
ret = 0;
dval = value;
} else {
// Make room for the minus sign, and proceed as if positive.
ret = 1;
dval = -double(value);
}
ret += ceil(log10(dval+1.0));
return ret;
}
Ik heb deze functie getest voor het hele bereik van int
in g++ 9.3.0 voor x86-64.
Antwoord 7, autoriteit 9%
Een computernerd zijn en geen wiskundenerd zou ik doen:
char buffer[64];
int len = sprintf(buffer, "%d", theNum);
Antwoord 8, autoriteit 9%
int intLength(int i) {
int l=0;
for(;i;i/=10) l++;
return l==0 ? 1 : l;
}
Hier is een kleine efficiënte
Antwoord 9, autoriteit 6%
Zou dit een efficiënte aanpak zijn? Converteren naar een string en de eigenschap length vinden?
int num = 123
string strNum = to_string(num); // 123 becomes "123"
int length = strNum.length(); // length = 3
char array[3]; // or whatever you want to do with the length
Antwoord 10, autoriteit 6%
Wat dacht je van (werkt ook voor 0 en negatieven):
int digits( int x ) {
return ( (bool) x * (int) log10( abs( x ) ) + 1 );
}
Antwoord 11, autoriteit 6%
De beste manier is om te vinden met behulp van log, het werkt altijd
int len = ceil(log10(num))+1;
Antwoord 12, autoriteit 3%
Code voor het vinden van Lengte van int en decimaal getal:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int len,num;
cin >> num;
len = log10(num) + 1;
cout << len << endl;
return 0;
}
//sample input output
/*45566
5
Process returned 0 (0x0) execution time : 3.292 s
Press any key to continue.
*/
Antwoord 13
Er zijn geen ingebouwde functies in C/C++ noch in STL om de lengte van een geheel getal te vinden, maar er zijn weinig manieren waarop het kan worden gevonden
Hier is een voorbeeld C++-code om de lengte van een geheel getal te vinden, het kan in een functie worden geschreven voor hergebruik.
#include<iostream>
using namespace std;
int main()
{
long long int n;
cin>>n;
unsigned long int integer_length = 0;
while(n>0)
{
integer_length++;
n = n/10;
}
cout<<integer_length<<endl;
return 0;
}
Hier is een andere manier, converteer het gehele getal naar string en vind de lengte, het bereikt hetzelfde met een enkele regel:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
long long int n;
cin>>n;
unsigned long int integer_length = 0;
// convert to string
integer_length = to_string(n).length();
cout<<integer_length<<endl;
return 0;
}
Opmerking: Voeg het cstring
headerbestand
toe
Antwoord 14
De gemakkelijkste manier is:
#include <string>
int int_length = to_string(42).length();
Antwoord 15
meest efficiënte code om de lengte van een nummer te vinden .. telt ook nullen, opmerking “N” is het nummer dat moet worden gegeven.
#include <iostream>
using namespace std;
int main()
{
int n,len= 0;
cin>>n;
while(n!=0)
{
len++;
n=n/10;
}
cout<<len<<endl;
return 0;
}