1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

ضرب اعداد بزرگ!

شروع موضوع توسط minaaa ‏28/1/11 در انجمن C #C++

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    با این code میشه اعداد خیلی بزرگ رو خیلی سریع در هم ضرب کرد . اعدادی که تو هیچ متغیر عددی جا نمیشن​




    #include <iostream>
    #include <fstream>
    #include <string>
    #include <algorithm>
    using namespace std;
    string zarb(string &a,string &b){
    reverse (a.begin(),a.end());
    reverse (b.begin(),b.end());
    string ans;
    ans.insert(0,1000,'0'); // inja mishe andazeye javab ro taghir dad
    int c=0;
    int i,j;
    for (i=0;i<a.size();++i){
    for (j=0;j<b.size();++j){
    if ( (ans[i+j]-48 + ((a-48)*(b[j]-48)+c)%10) > 9 ){
    int carry=(ans[i+j]-48 + ((a-48)*(b[j]-48)+c)%10) /10;
    ans[i+j] = (ans[i+j]-48 + ((a-48)*(b[j]-48)+c)%10) %10 + 48;
    c=((a-48)*(b[j]-48)+c)/10;
    int k=1;
    ans[i+j+k]+=carry;
    while ( ans[i+j+k]>'9' ){
    carry = (ans[i+j+k] - '0')/10;
    ans[i+j+k]= (ans[i+j+k]-48)%10 +'0';
    ++k;
    ans[i+j+k]+=carry;
    }
    }
    else{
    ans[i+j] += ((a-48)*(b[j]-48)+c)%10;
    c = ((a-48)*(b[j]-48)+c ) /10;
    }
    }
    ans[i+j]+=c;
    c=0;
    }
    for (int i=ans.size()-1;i>0;--i)
    if (ans=='0')
    ans.erase (ans.end()-1);
    else
    break;
    reverse (ans.begin(),ans.end());
    return ans;
    }
    int main() {
    string s1,s2;
    cin >> s1 >> s2;
    cout << zarb(s1,s2) << endl;
    return 0;
    }</pre>


    ​




    ​