نمایش نتایج 1 تا 9 از 9

نام تاپیک: بدست آوردن عدد نپر e تا 10000 رقم

  1. #1
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    بدست آوردن عدد نپر e تا 10000 رقم

    کسی نظری در این مورد نداره می دونید که فرمولش اینه:

    فاکتوریلم که بدست آوردیم حالا چطور معکوسش کنیم؟؟؟؟؟؟//

  2. #2

    نقل قول: بدست آوردن عدد نپر e تا 10000 رقم

    اگه دقت ارقام واستون مهمه ، باید عملگر تقسیم رو علاوه بر عملگر فاکتوریل برای اعداد بزرگ پیاده سازی کنید .

    اگه تقریبی میخواین بدست بیارین میتونید از سری های معروف (تیلور و ...) یا محاسبات عددی

    و یا بجای فاکتوریل از تقریب استرلینگ استفاده کنید .

    موفق باشید .






  3. #3
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: بدست آوردن عدد نپر e تا 10000 رقم

    این تقسیم اعداد بزرگ را کسی سورسشو نداره؟؟؟؟؟؟؟؟؟؟؟

  4. #4

    نقل قول: بدست آوردن عدد نپر e تا 10000 رقم

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    این تقسیم اعداد بزرگ را کسی سورسشو نداره؟؟؟؟؟؟؟؟؟؟؟
    دست شما درد نکنه ! باز کاربرای تازه وارد این حرفو میزدن ، آدم ناراحت نمیشد ؛

    یه کاربر دائمی بیاد اینو حرفو بزنه ، واقعا نمیدونم چی بگم ؟؟؟!!!

    مثل اینکه لازمه یه بار قوانین رو مرور کنید .






  5. #5
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: بدست آوردن عدد نپر e تا 10000 رقم

    خوب دیگه حرفه حق میزنید و درسته حرفتون اما من تا الان قوانین ساید رو مطالعه نکرده بودم الان مطالعه کردم کسی اگه تا الان نخونده و دوست داره مطالعه کنه به این لینک مراجعه کنه

    و بحث خودمون آقا من یک کتابخونه خیلی خیلی خوب برای کار با اعداد بزرگ پیدا کردم ولی نمی دونم چطور تقسیمشو برا خودم جدا کنم
    این لینک دانلود این کتابخونه که خیلی پر سرعت و قویه :
    http://gmplib.org/#DOWNLOAD

  6. #6

    نقل قول: بدست آوردن عدد نپر e تا 10000 رقم

    اما من تا الان قوانین ساید رو مطالعه نکرده بودم الان مطالعه کردم
    متاسفانه اکثر کاربران دچار همین مشکل هستند و هنگام عضویت ، با بی تفاوتی نسبت به خواندن قوانین، عضو

    میشوند .






  7. #7

    نقل قول: بدست آوردن عدد نپر e تا 10000 رقم

    حالا این مساله رو برای چی میخواین ؟

    کجا میخواین تا 10000 رقم اعشار از e استفاده کنین ؟






  8. #8
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: بدست آوردن عدد نپر e تا 10000 رقم

    نمی خواستم اینو بگم ولی خوب می گم یکمی هم بخندیم این قضیه مربوط به چند سال پیشه
    یک پروژه دانشجویی بود که گفته بود عدد نپر را تا 10000 رقم اعشار حساب کنید منم فاکتوریل جمع دو تا عدد و غیره را پیاده کردم ولی خوب با توجه به زمان و وقت پروژه به جایی نرسیدم برا همین یک نرم افزار متمتیک بود ازش استفاده کردم و تا 10000 رقم نپر رو بدست آوردم و ریختم تو یه فایل بعد محتویات فایل رو چاپ کردم. تازه تایمرم براش گذاشته بودم
    حالا می خواستم بدونم کلا چطوری میشه اینو پیاده سازیش کرد تقسیم چطوریه که کسی نه اینجا جواب داد نه تو قسمت الگوریتم ها برا همین دنبالشم البته این کتابخونه gmp را میشه تو ویژوال 2008 ازش استفاده کرد و نپر را تا هر رقمی بدست آورد ولی دوست دارم خودم پیادش کنم

  9. #9
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: بدست آوردن عدد نپر e تا 10000 رقم

    اینم عیدیه ما تمام عملگر های اصلی برای ارقام بزرگ پیاده سازی شده برید اساسی حالشو ببرین البته جا برای تحلیل داره

    #include<iostream>
    #include<string>

    using namespace std;
    class INT {
    int digits[100];
    char sign;
    INT& check(); // eliminates a negative zero (new) In Progress...
    public:
    INT( ); // Completed...

    INT(int num); // Completed... convert a int to INT
    INT(string s); // In Progress... convert a string to INT

    bool operator<(const INT&) const; // Compelted...
    bool operator>(const INT&) const; // Compelted...
    bool operator==(const INT&) const; // Completed...
    bool operator!=(const INT&) const; // Completed...
    bool operator <=(const INT&) const; // Completed...
    bool operator >=(const INT&) const; // Completed...
    operator int() const; // Completed...

    operator string() const; // In Progress... INT to string

    friend INT operator%(const INT&, const INT&); // Completed...
    friend INT operator+(const INT&, const INT&); // Completed...
    friend INT operator-(const INT&, const INT&); // Completed...
    friend INT operator*(const INT&, const INT&); // Completed...
    friend INT operator/(const INT&, const INT&); // Completed...
    friend ostream& operator<<(ostream&, const INT&); // Completed...
    friend istream& operator>>(istream&, INT&); // Completed...
    };


    INT::INT( ){
    sign = 'p';

    for (int a=0; a<100; a++)
    digits[a] = 0;
    }

    INT::INT(int num){
    sign = 'p';
    num = 0;
    }



    INT::INT(string s){ //convert a string to INT
    int m=99, g, b;
    if(s[0] =='-'){b=1; sign='n';}
    else {b=0; sign='p';}
    for(int a=(s.length()-1); a>=b; a--){
    g=s[a]-48;
    digits[m]=g;
    m--;
    }

    }


    INT::operator int() const{ // In Progress...
    int num=0, multiply = 1, newnum = 1;

    for ( int a = 99; a > 0; a --){
    num += digits[a] * multiply;
    multiply *= 10;
    }

    if ( sign == 'n') return (num * -1);
    else return num;

    }
    INT::operator string() const{
    string s;
    char digchar;
    digchar = (int)digits[99];
    cout << digchar << endl;
    // cout << digits[99];
    cout << endl;
    //for(int a = 99; a >= 0; a--)
    //{
    // s[a] = "digits[a]";
    // cout << s[a] << endl;
    //}
    //cout << s << endl;
    //cout << " ^s" << endl;
    return s;
    }

    // Less Than " < " Completed...
    bool INT::operator<(const INT& z) const{
    if ( operator>(z) == true || operator==(z) == true) return false;
    else return true;

    }

    // Greater Than " > " Completed...
    bool INT::operator>(const INT& z)const{
    string num1, num2;
    int a = 0;
    if ( operator==(z) == true) return false;
    if(sign == 'p' && z.sign == 'n') return true;
    if(sign == 'n' && z.sign == 'p') return false;
    if(sign == 'p' && z.sign == 'p'||sign == 'n' && z.sign == 'n'){
    bool flag = false;
    bool flag2 = false;
    bool flag3 = false;
    while (a<100 && flag3==false) { // figure out which one is largest
    if (digits[a] < z.digits[a]) { num2 = "L"; num1 = "S"; flag3 = true; }
    if (digits[a] > z.digits[a]) { num1 = "L"; num2 = "S"; flag3 = true; }
    a++;
    }
    if ( num1 == "S" && num2 == "L" ) return false;
    if ( num1 == "L" && num2 == "S" ) return true;
    }
    }

    // Equal to " == " Completed...
    bool INT::operator==(const INT& z) const{
    if(sign == 'p' && z.sign == 'n') return false;
    if(sign == 'n' && z.sign == 'p') return false;
    if(sign == 'p' && z.sign == 'p'||sign == 'n' && z.sign == 'n'){
    for ( int a = 0; a < 100; a++){
    if( digits[a] != z.digits[a]) return false;
    }
    return true;
    }
    }
    // Not Equal to " != " Completed...
    bool INT::operator!=(const INT& z) const{
    if ( operator==(z) == true ) return false;
    else return true;
    }
    // Less Than or Equal to " <= " In Progress...
    bool INT::operator <=(const INT& z ) const{
    if ( operator==(z) == true || operator<(z) == true) return true;
    else return false;
    }

    // Greater Than orEqual to " >= " In Progress...
    bool INT::operator >=(const INT& z ) const {
    if ( operator==(z) == true || operator>(z) == true) return true;
    else return false;
    }

    // Modulation...Completed...
    INT operator%(const INT& x, const INT& y){
    INT modX, modY, modZ, prod1, prod2;
    modX.sign=x.sign;
    modY.sign=y.sign;
    modZ.sign= 'p';
    prod1.sign= 'p';
    prod2.sign= 'p';
    for(int a=0; a < 100; a++){
    modX.digits[a]= x.digits[a];
    modY.digits[a]= y.digits[a];
    modZ.digits[a]= 0;
    prod1.digits[a] = 0;
    prod2.digits[a] = 0;
    }

    //if(modX.operator>(modY))
    // if(modX > modY){
    prod1 = operator/(modX, modY);
    prod2 = operator*(prod1, modY);
    modZ = operator-(modX, prod2);
    // }
    return modZ;
    }
    // Addition...Completed...
    INT operator+(const INT& x, const INT& y) {
    INT result;
    if (x.sign == y.sign) {
    result.sign = x.sign;
    int a, carry = 0, total;
    for (a=99; a>=0; a--) {
    total=x.digits[a]+y.digits[a]+carry;
    if (total > 9) carry = 1;
    else carry = 0;
    result.digits[a] = total % 10;
    }
    }
    else {
    INT larger, smaller;
    int a=0;
    bool flag=false;
    while (a<100 && flag==false) { // figure out which one is largest
    if (x.digits[a] < y.digits[a])
    { larger = y; smaller = x; result.sign = y.sign; flag = true; }
    if (x.digits[a] > y.digits[a])
    { larger = x; smaller = y; result.sign = x.sign; flag = true; }
    a++;
    }
    if (flag) { // add them unless flag is false (the two were equal)
    for (int b=99; b>=0; b--) {
    if (smaller.digits[b] > larger.digits[b]) { // need to borrow
    int c = b-1;
    while (larger.digits[c] == 0) {
    larger.digits[c] = 9;
    c = c - 1;
    }
    larger.digits[c] = larger.digits[c] - 1;
    larger.digits[b] = larger.digits[b] + 10;
    }
    result.digits[b] = larger.digits[b] - smaller.digits[b];
    }
    }
    }
    return result;
    }

    // Subtraction...Completed...
    INT operator-(const INT& x, const INT& y) {
    INT subX, subY;
    subX.sign=x.sign;
    if(y.sign=='p') subY.sign='n'; // Swaps the sign for the second variable
    if(y.sign=='n') subY.sign='p';
    for(int a=0; a < 100; a++){subX.digits[a]=x.digits[a]; subY.digits[a]=y.digits[a];}

    return operator+(subX, subY);
    }

    // Multiplication...Completed...
    INT operator*(const INT& x, const INT& y){
    INT result, array;
    int count=0, count2=0, carry = 0, total, num=0, a=0, b=0;
    if (x.sign == y.sign)
    result.sign = 'p';
    else
    result.sign = 'n';
    for (a=99; a>=0; a--) {
    total = (x.digits[a] * y.digits[99]) + carry;
    if (total > 9) { carry = total/10; total = total % 10; }
    else carry = 0; result.digits[a] = total;
    }
    for (b=98; b>=0; b--) { count = b; count2 = b;
    for (int c=99; c>=0;c--) array.digits[c] = 0; carry = 0;
    for (a=99; count>=0; a--, count--) {
    while (count2 < a) { array.digits[a] = 0; count2++; }
    total = (y.digits[b] * x.digits[a]) + carry;
    if (total > 9) { carry = total/10; total = total % 10; }
    else carry = 0;
    array.digits[count] = total;
    }
    carry = 0;
    for (int c=99; c>=0; c--) { total = result.digits[c] + array.digits[c] + carry;
    if (total > 9) { carry = total/10; total = total % 10; }
    else carry = 0;
    result.digits[c] = total;
    }
    } // End for


    return result;
    }

    // Division...Completed...
    INT operator/(const INT& x, const INT& y)
    { INT result,temp_product,temp_extracted,temp_quotient,t emp_dif,guess,temp_constant;
    int x_init_pos=0,y_init_pos=0,sizex,sizey,p=0;
    //to find how big x is and y is.
    int b;
    for( b=0;x.digits[b]==0;b++) x_init_pos++;
    for(b=0;y.digits[b]==0;b++) y_init_pos++;
    //to determine the sign of the result
    sizey=100-y_init_pos;
    sizex=100-x_init_pos;
    for(int a=0;a<sizey;a++)
    temp_extracted.digits[y_init_pos+a]=x.digits[x_init_pos+a];

    for(int c=0;c<=sizex-sizey;C++‎)
    {
    guess.digits[99]=9;
    temp_product=y*guess;
    if(temp_product.sign=='n')
    temp_product.sign='p';
    temp_dif=temp_extracted-temp_product;

    if(temp_dif.sign=='n') p=1;

    if(p == 1) {
    while(p==1){
    guess.digits[99]=guess.digits[99]-1;
    temp_product=guess*y;
    if(temp_product.sign=='n') temp_product.sign='p';
    temp_dif=temp_extracted-temp_product;

    if(temp_dif.sign=='n') { INT temp_dif; p=1; }
    else p=0;
    }
    }
    temp_quotient.digits[100-(sizex-sizey)+c-1]=guess.digits[99];
    int e;
    for( e = 0; temp_dif.digits[e] == 0 && e < 99; e++ )
    {}
    INT shifted_value;
    if(e==100&&temp_dif.digits[99]==0) {
    e=99;
    shifted_value.digits[99]=0;
    }
    for(int shift_value = e-1,m=0;shift_value<99;shift_value++,m++) {
    shifted_value.digits[shift_value]=temp_dif.digits[e+m];
    }
    shifted_value.digits[99]=x.digits[100-(sizex-sizey)+c];

    for(int h=0;h<100;h++)
    temp_extracted.digits[h]=shifted_value.digits[h];
    }
    for(int k=0;k<100;k++)
    result.digits[k]=result.digits[k]+temp_quotient.digits[k];
    if(x.sign!=y.sign)
    result.sign = 'n';
    return result;
    }


    // Output Stream...Completed...
    ostream& operator<< (ostream& os, const INT& num) {
    int a = 0;
    if (num.sign == 'n') os << '-';
    while (a < 99 && num.digits[a] == 0)
    a++;
    while (a < 100)
    os << num.digits[a++];
    return os;
    }

    // Input Stream...Completed...
    istream& operator>> (istream& is, INT& num) {
    string number;
    is >> number;
    if (number.at(0) == '-') num.sign='n';
    if (number.at(0) == '+') num.sign='p';
    int start = 0;
    if ( !isdigit(number.at(0)) ) start = 1;
    int loc = 100-(number.length()-start);
    for (int a=start; a<number.length(); a++)
    num.digits[loC++‎] = number.at(a) - '0';
    return is;
    }


    using namespace std;
    int main( ) {
    INT a, b, c;
    int num;
    string s;
    system("cls");
    cout << "Enter two large integers and a string : " << endl;
    cin >> a >> b >> s;
    cout << "Addition : " << endl;
    c = a + b; cout << c << endl << endl;
    cout << "Subtraction : " << endl;
    c = a - b; cout << c << endl << endl;
    cout << "Multiplication : " << endl;
    c = a * b; cout << c << endl << endl;
    cout << "Division : " << endl;
    c = a / b; cout << c << endl << endl;
    cout << "Modulation : " << endl;
    c = a % b; cout << c << endl << endl;
    cout << "Comparisons: "<< endl;
    if(a == b) cout << "a == b" << endl;
    if(a > b) cout << "a > b" << endl;
    if(a >= b) cout << "a >= b" << endl;
    if(a < b) cout << "a < b" << endl;
    if(a <= b) cout << "a <= b" << endl;
    if(a != b) cout << "a != b" << endl;

    cout <<endl << "Convert from (INT) to (int)" << endl;
    cout << "Original INT:" << endl;
    cout << a << endl << endl;
    cout << "Converted (int)INT:" <<endl;
    cout << (int)a << endl << endl;

    cout <<" Convert string to INT:"
    << (INT)s <<endl;

    cout <<" Convert from (INT) to (string)" << endl;
    cout << "Oringinal INT:" << endl;
    cout << a << endl << endl;
    cout << "Converted (string)INT:" << endl;
    //cout << (string)a << endl;
    //num = a.operator int();
    //num = a;
    //cout << (int)a << endl;
    system("pause");
    return 0;
    }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •