ارسال پاسخ 
 
رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ضرب اعداد بزرگ
02-10-2007, 02:04 PM (آخرین تغییر در این ارسال: 02-10-2007 09:38 PM توسط soheil_sf.)
ارسال: #1
ضرب اعداد بزرگ
سلام این کد ضرب اعداد بزرگه که اگه با تابع جمع اعداد بزرگی رو که دوست خوبم در لینک ریز گذاشته ترکیب کنین میتونین اعداد بی نهایت بزرگ رو هم در هم ضرب کنین:

لینک جمع اعداد بزرگ:
http://forum.codecorona.com/showthread.php?tid=639
اینم کد ضرب اعداد بزرگ که با تابع لینک قبلی میتونه ترکیب بشه:
کد:
//written by soheil setayeshi
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<conio.h>
using namespace std;
vector<string> multiply( string ,string );
int main()
{
    string num1,num2,product;
    vector<string> v;
    cout<<"Enter first number : ";
    cin>>num1;
    cout<<"Enter second number : ";
    cin>>num2;
    v=multiply(num1,num2);
    cout<<"The products are :\n";
    for (int i=0;i<v.size();i++)
        cout<<v[i]<<endl;
    cout<<"The final product is sum of this numbers (with BigSum fauction)";
    getch();
    return 0;
}
vector<string> multiply( string n1 ,string n2 )
{
       int carry=0,count=0,i,j,k;
       long int m=0;
       string temp,product;
       vector<string> v;
       for (i=n1.size()-1 ; i>=0 ; i--)
       {
           for (j =n2.size()-1 ; j>=0 ; j--)
           {
              
               m +=(int)(n1[i]-48) * (int)(n2[j]-48) + carry;
               temp += m%10 + 48;
               carry = m/10;
               m=0;
           }
           if (carry)
           {
              temp+=carry+48;
              carry=0;
           }
           reverse(temp.begin(),temp.end());
           for (k=0 ; k < count ; k++)
               temp+='0';
           v.push_back(temp);
           temp.clear();
           count++;
       }
       return v;
}

Just OpenGL

International Stroop Test link1
International Stroop Test link2
Android and Web programming
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
Like Post نقل قول این ارسال در پاسخ
02-10-2007, 08:59 PM (آخرین تغییر در این ارسال: 02-10-2007 09:58 PM توسط mohammad.)
ارسال: #2
RE: ضرب اعداد بزرگ
سلام به همگی .اون تابع بالایی که سهیل جان نوشته با تابع جمعی که من نوشتم می تونن با هم برای محاسبه فاکتوریل هر عددی به کار گرفته بشند.ولی من سعی خودم رو کردم کدی بنویسم که به صورت مستقیم بدون استفاده از اون تابع جمعی که نوشتم بتونه ضرب اعداد بزرگ رو بدست بیاره ، ولی نمیدونم چرا برای بعضی ضرب ها درست جواب نمیده.
کد:
//Author:Mohammad
#include <iostream>
#include <fstream>
#include <deque>
#include <string>
#include <algorithm>
using namespace std;
void mul(string,string);
int main()
{
    string s1,s2;
    cout<<"Please Enter The First Number:";
    cin>>s1;
    cout<<"Please Enter The Second Number:";
    cin>>s2;
    mul(s1,s2);
    return 0;
}
void mul(string s1,string s2)
{
    int i,j,R,C=0,counter=0,R1,C1=0;
    bool b=false;
    deque<int> MUL;
    MUL.clear();
    if(s1.size()<s2.size())
        swap(s1,s2);
    MUL.resize(s1.size()*2);
    int S=MUL.size()-1;
    for(i=s1.size()-1,j=s2.size()-1;i>=0;i--,S--)
    {
        R=(s1[i]-48)*(s2[j]-48)+C;

        if(R>9)
        {
            C=R/10;
            if(S>=0&&MUL[S]+R%10>9)
            {
                C1=(MUL[S]+R%10)/10;
                MUL[S]=(MUL[S]+R%10)%10;
                if(S-1<0)
                    MUL.push_front(C1);
                else
                    MUL[S-1]+=C1;

            }
            else if(S>=0)
                MUL[S]+=R%10;
        
        }
        else
        {
            if(S>=0&&MUL[S]+(R%10)>9)
            {
        
                
                C1=(MUL[S]+R%10)/10;
                MUL[S]=(MUL[S]+R%10)%10;
                if(S-1<0)
                    MUL.push_front(C1);
                    
                else
                    MUL[S-1]+=C1;
            }
            else
            {
                if(S<0)
                   MUL.push_front(R);
               else
                    MUL[S]+=(R%10);
            }
            C=0;
        }
    
    
        if(i==0)
        {
            if(C>0)
            {
               MUL[--S]=C;
               b=true;
            }
            j--;
            if(j<0)
            {
                if(C>0&&!b)
                    MUL[S]+=C;
                break;
            }
            counter++;
            i=s1.size();
            S=MUL.size()-1;
            S-=counter;
            S++;
            C=0;
            b=false;
        }
    }
    
    while(MUL[0]==0)
    {
        MUL.erase(MUL.begin());
        if(MUL.empty())
            break;
    }
    if(MUL.empty())
        cout<<0;
    else
        for(i=0;i<MUL.size();i++)
            cout<<MUL[i];
    
}

Life Is An Infinit Loop Try To Find A Way
To Exit From It.
.Bienvenue à notre emplacement.
http://www.codecorona.com
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
Like Post نقل قول این ارسال در پاسخ
02-10-2007, 10:35 PM
ارسال: #3
RE: ضرب اعداد بزرگ
اینم کد دوست خوبمون آقای ملایی هست که هیج جایی برای بحث باقی نمیزاره.
کد:
#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[i]-48)*(b[j]-48)+c)%10) > 9 ){
            int carry=(ans[i+j]-48 + ((a[i]-48)*(b[j]-48)+c)%10) /10;
            ans[i+j] = (ans[i+j]-48 + ((a[i]-48)*(b[j]-48)+c)%10) %10 + 48;
            c=((a[i]-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[i]-48)*(b[j]-48)+c)%10;
            c = ((a[i]-48)*(b[j]-48)+c ) /10;
         }
      }
      ans[i+j]+=c;
      c=0;
   }
   for (int i=ans.size()-1;i>0;--i)
         if (ans[i]=='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;
}

Life Is An Infinit Loop Try To Find A Way
To Exit From It.
.Bienvenue à notre emplacement.
http://www.codecorona.com
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
Like Post نقل قول این ارسال در پاسخ
ارسال پاسخ 


موضوعات مشابه ...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  جمع و ضرب و تفريق و فاتوريل اعداد بزرگ با ليست پيوندي mohammadnrn 4 5,347 06-12-2010 11:26 PM
آخرین ارسال: sorset
  ضرب اعداد بزرگ maryam_masiha 3 5,023 17-04-2009 10:35 PM
آخرین ارسال: زهرا
  عملیات روی اعداد بزرگ dj_nemo 5 7,758 30-06-2008 10:41 PM
آخرین ارسال: soheil_sf
  فاکتوریل اعداد خیلی بزرگ baby 7 6,534 15-11-2007 11:35 PM
آخرین ارسال: rrm
  جمع اعداد خیلی بزرگ mohammad 3 4,745 02-10-2007 10:03 PM
آخرین ارسال: mohammad
  complex class اعداد مختلط ),ورژن 2 mohammad 0 1,748 17-06-2007 08:21 AM
آخرین ارسال: mohammad
  complex class اعداد مختلط mohammad 0 2,058 17-05-2007 07:55 PM
آخرین ارسال: mohammad

پرش در انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان









ترجمه MyBB فارسی - فارسی ساز نسخه ۱.۶
قدرت گرفته از MyBB, © 2002-2014 MyBB Group.

Theme "Aadamentium" created by: MyBB Themes | Tutoriale


server monitor