PDA

View Full Version : مشكل در برنامه ضرب



Milad_black70
شنبه 05 تیر 1389, 10:15 صبح
دوستان گرامي! يه برنامه نوشتم واسه ضرب كردن اعداد بزرگ، ولي نميدونم چرا هر عددي كه ميدم بهم عدد -48 رو به عنوان جواب ميده! كسي ميتونه كمك كنه؟ (ظاهرا مشكل اونجاست كه ميخواد c[j][i] رو با هم جمع كنه كه نميدونم چرا مقدار درستشو نميگيره!)



void main()
{
char A[50] , B[50] , R[100], c[50][100];
int i , j , k , a , b , sum=0 , sum2=0, d1, d2, d3, d4;

cin >> A;
cin >> B;

a = strlen(A);
b = strlen(B);

for (j=b-1; j>=0; j--)
{
d1 = B[j]-'0';
k = a+b - (b-j)+1;
for (i=a-1; i>=0; i--)
{
d2 = A[i]-'0';
sum = sum/10 + (d1*d2);
if (i==0) c[b-j][k] = sum;
else c[b-j+1][k] = sum%10;
k--;
}
}

for (i=a+b-1; i>=0; i--)
for (j=0; j<b; j++)
{
d4 = c[j][i]-'0';
sum2= sum2/10 + d4;
R[i] = sum2%10;
}

for (i=0; i<a+b; i++)
d3 = R[i] - '0';
cout << d3;

}

Milad_black70
یک شنبه 06 تیر 1389, 17:16 عصر
كسي نبود؟ من تا فردا وقت دارم فقط!

Salar Ashgi
یک شنبه 06 تیر 1389, 18:16 عصر
با جستجو در تالار :

http://www.barnamenevis.org/forum/showthread.php?t=157329&highlight=%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF+%D8%A8%D8 %B2%D8%B1%DA%AF

===============

http://www.barnamenevis.org/forum/showthread.php?t=142378&highlight=%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF+%D8%A8%D8 %B2%D8%B1%DA%AF

==============

http://www.barnamenevis.org/forum/showthread.php?t=164466&highlight=%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF+%D8%A8%D8 %B2%D8%B1%DA%AF

BahmanDB
دوشنبه 07 تیر 1389, 02:43 صبح
ضرب اعداد صحیح بزرگ
مسئله: ضرب دو عدد صحیح بزرگ u و v








large _ integer prod ( large_integer u, large_integer v)



{



large_inreger x , y , w , z ;



int n , m ;



n = maximum(number of digits in u,number of digits in v)



if (u = = 0 || v = = 0)



return 0 ;




else if (n < = threshold)



return u × v obtained in the usual way;



else {



m = Į n / 2 ⌡;



x = u divide 10 ^ m ; y = rem 10 ^ m;



w = v divide 10 ^ m ; z = rem 10 ^ m;



return prod (x ,w) × 10 ^2m + ( prod ( x, z) + prod (w, y )) × 10 ^ m + prod ( y, z);



}



}








تحلیل پیچیدگی زمانی در بدترین حالت برای ا لگوریتم( ضرب اعداد صحیح)
عمل اصلی: دستکاری یک رقم دهدهی در یک عدد صحیح بزرگ در
هنگام جمع کردن ، تفریق کردن، یا انجام اعمالdivide 10 ^ m ،
rem 10 ^m یا ×10 ^ m. هر یک از این اعمال را m بار انجام می دهد.
اندازه ورودی: n ، تعداد ارقام هر یک از دو عدد صحیح.

به ازای n > s که n توانی از 2استW ( n ) = 4 W (n / 2) + cn
W ( s ) = 0

W ( n ) Є θ ( n² )

ضرب اعداد صحیح بزرگ 2









large_integer prod2 (large_integer u , large_ integer v)



{



large_integer x , y , w , z , r , p , q;



int n , m;



n = maximum (number of digits in u,number of digits in v);



if (u = = 0 || v = = 0)



return 0 ;



else if (n < = threshold)



return u × v obtained in the usual way;



else {



m = Į n / 2 ⌡;



x = u divide 10 ^ m ; y = rem 10 ^ m;



w = v divide 10 ^ m ; z = rem 10 ^ m;



r = prod2 (x + y, w + z );



p = prod2 ( x , w )



q = prod2 ( y , z );



return p ×10 ^ 2m + ( r – p – q ) × 10 ^ m +q ; }



}















تحلیل پیچیدگی زمانی در بدترین حالت برای الگوریتم( ضرب اعداد صحیح2)
عمل اصلی: دستکاری یک رقم دهدهی در یک عدد صحیح بزرگ در
هنگام جمع کردن ، تفریق کردن، یا انجام اعمالdivide 10 ^ m ،
rem 10 ^m یا ×10 ^ m. هر یک از این اعمال را m بار انجام می دهد.
اندازه ورودی: n ، تعداد ارقام هر یک از دو عدد صحیح.

به ازای n > s که n توانی از 2است
3W(n/2)+ c n <=W (n) <= 3W (n / 2 +1) + c n
W (s) = 0
W (n) = θ (n ^ 1.58

Milad_black70
دوشنبه 07 تیر 1389, 06:24 صبح
خيلي خيلي ممنونم و معذرت ميخوام از سرچ نكردنم. ولي راستش در واقع ميخواستم ببينم مشكل برنامه اي كه نوشتم چي بود (البته ميدونم يه قسمتي رو اضافه كاري كردم، ولي نميدونم چرا جواب درست نميده)، نه اينكه يه برنامه ي آماده بخوام .... .
بازم ممنون به هر حال

Salar Ashgi
دوشنبه 07 تیر 1389, 09:38 صبح
BahmanDB (http://www.barnamenevis.org/forum/member.php?u=102124) عزیز ، ممنون از پست مفیدتون ، ولی اینجا تالار الگوریتم نیست که مباحث تحلیل الگوریتم ها

بحث بشه !