PDA

View Full Version : مبتدی: ضرب دو عدد بزرگ



BIGBAD
دوشنبه 29 اردیبهشت 1393, 21:48 عصر
سلام من این برنامه ضرب دو عدد بزرگ رو نوشتم ولی برای اعداد 6 رقمی مشکل داره
اگر تونستین مشکلش رو رفع کنید با تشکر

#include <cstdlib>

#include <iostream>

using namespace std;
unsigned long int mult(unsigned long int u,unsigned long int v,int n);
int main(int argc, char *argv[])
{
unsigned long int x,y;
int z;
cout<<"Enter The Number 1: "<<endl;
cin>>x;
cout<<"Enter The Number 2: "<<endl;
cin>>y;
cout<<"Enter the number of measurements :"<<endl;
cin>>z;
cout<<mult(x,y,z)<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
unsigned long int mult(unsigned long int u,unsigned long int v,int n)
{
unsigned long int a,b,c,d;
int s;
int j=1;
int l=1;
if(n==1)
return u*v;
else
{
s=n/2;
for(int i=0;i<s;i++)
j=10 * j;
a= ( u / j);
b= ( u % j);
c= ( v / j);
d= ( v % j);
for(int h=0;h<n;h++)
l=l*10;
return mult(a,c,(s)) * (l) + (mult(a,d,(s)) + mult(b,c,(s))) * (j) + mult(b,d,(s));
}
}

motherboard
دوشنبه 29 اردیبهشت 1393, 22:18 عصر
دوست عزیز کدتون رو اصلاح کردم به طوریکه ضرب 6 رقمی رو به درستی انجام میده.اما توجه داشته باشید که برای ضرب های بسیار بسیار بزرگ دیگه نوع متغیرهای با ظرفیت خیلی خیلی بزرگ نداریم.من در این کد ازunsigned long long int استفاده کردم.

#include <stdlib.h>
#include<iostream>
using namespace std;
unsigned long long int mult(unsigned long int u,unsigned long int v,int n);
int main(int argc, char *argv[])
{
int x,y,z;

cout<<"Enter The Number 1: "<<endl;
cin>>x;
cout<<"Enter The Number 2: "<<endl;
cin>>y;

cout<<mult(x,y,z)<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
unsigned long long mult(unsigned long int u,unsigned long int v,int n)
{
long long int a,b,c,d;
int s;
int j=1;
int l=1;
if(n==1)
return u*v;
else
{
s=n/2;
for(int i=0;i<s;i++)
j=10 * j;
a= ( u / j);
b= ( u % j);
c= ( v / j);
d= ( v % j);
for(int h=0;h<n;h++)
l=l*10;
return mult(a,c,(s)) * (l) + (mult(a,d,(s)) + mult(b,c,(s))) * (j) + mult(b,d,(s));
}
}

hostage_devil
دوشنبه 29 اردیبهشت 1393, 22:55 عصر
تابع شما مقدار unsigned long int رو بر میگردونه و این نوع داده تا یه عددی رو بیشتر نمیتونه در خودش نگه داره ( مثلا اینجارو نگاه کنید http://www.cplusplus.com/reference/climits/ )
حاصل ضرب دو عدد 6 رقمی میتونه 12 رقم داشته باشه که از رنج نوع داده تعریف شده بیشتره

hatamiarash7
جمعه 02 خرداد 1393, 11:22 صبح
شما برای ضرب های خیلی بزرگ میتونید از آرایه اصتفاده کنید . من برای پروژه دانشگاهم یه برنامه ضرب دو عدد 1000 رقمی رو داشتم . با آرایه خیلی راحت میشه این کارو انجام داد