بدست آوردن تعداد رقم های یک عدد

code_ever

Member
سلام. من این تو تا function رو نوشتم که مثلا تعداد ارقام اعداد رو بدس بیارم:
کد:
long long countOfDigit2(long long num){     for (long long i = 10; i == 0; i *= 10)     {         if ((num > i) && (num < (i * 10)))         {             num = i;             i = 0;         }     }    return log10(num) + 1;}
و
کد:
int countOfDigit(double num){    int digits = 0;    for(int i = 10; i != 0 ; i *= 10)    {        digits++;        if ((num / i) < 1)        {            i = 0;        }    }    return digits;}
ولی هر دوی این ها واسه اعداد بالای 12 تا رقم جواب اشتباه می دن. میشه بگین مشکل از کجاست؟
 

the_king

مدیرکل انجمن
سلام. من این تو تا function رو نوشتم که مثلا تعداد ارقام اعداد رو بدس بیارم:
کد:
long long countOfDigit2(long long num){     for (long long i = 10; i == 0; i *= 10)     {         if ((num > i) && (num < (i * 10)))         {             num = i;             i = 0;         }     }    return log10(num) + 1;}
و
کد:
int countOfDigit(double num){    int digits = 0;    for(int i = 10; i != 0 ; i *= 10)    {        digits++;        if ((num / i) < 1)        {            i = 0;        }    }    return digits;}
ولی هر دوی این ها واسه اعداد بالای 12 تا رقم جواب اشتباه می دن. میشه بگین مشکل از کجاست؟

اعداد long long تا عدد 19 رقمی 9,223,372,036,854,775,807 رو ثبت می کنند اما تابع log10 یک تابع اعشاری ئه که در بهترین دقت با long double یا همون double کار می کنه،
انواع داده اعشاری مثل double بدلیل ساختار ممیز شناور شون دقت محدودی دارند. نمی توانند تعداد ارقام زیادی رو همانطور که هست ثبت کنند.

اعداد بزرگتر از 18 رقم رو امتحان نکنید :
کد:
int countOfDigit3(long long num)
{
    if (num < 0)
        num = -num;
    int c = 1;
    for (long long i = 10; num > i; i *= 10)
    {
        c++;
    }
    return c;
}
 

جدیدترین ارسال ها

بالا