PDA

View Full Version : ضرب دو عدد با طول دلخواه یعنی رشته ای به طول n ضرب در رشته ای به طول سرریز هرگز رخ نمی دهد



bahar1370
دوشنبه 22 آذر 1389, 17:43 عصر
double x = 0, k = 0, h = 0, pp = 0;
int l = 0, ll = 0, lll = 0,nn=0,xx=0,t1=0,t2=0;

string a = "", b = "", s = "", c = "", p = "", o = "", q = "", a1 = "", b1 = "", y = "", ss = "", d = "", u = "",ff="";
s = textBox1.Text;
c = textBox2.Text;
for (int i = s.Length - 1; i >= 0; i--)
a = a + s.Substring(i, 1);
for (int i = c.Length - 1; i >= 0; i--)
b = b + c.Substring(i, 1);
for (int i = 0; i < b.Length; i++)
{
for (int j = 0; j < a.Length; j++)
{
for (int t = 1; t <= j; t++)
p = p + "0";

x = Convert.ToInt32(a.Substring(j, 1)) * Convert.ToInt32(b.Substring(i, 1));
ff = x.ToString() + p;
p = "";
// k = Convert.ToInt64(p) + k;
//---------------------------------------
ss = "";
a1 = u;
u = "";
b1 = ff;
if (a1.Length < b1.Length)
{
y = a1;
a1 = b1;
b1 = y;
}
ll = a1.Length;
lll = b1.Length;
l = ll - lll;

for (int v = 1; v <= l; v++)
d = d + "0";
b1 = d + b1;
d = "";
for (int g = ll-1; g >= 0; g--)
{
t1 =Convert.ToInt32(a1.Substring(g, 1));
t2 = Convert.ToInt32(b1.Substring(g, 1));
xx = t1 + t2 + nn;
pp = xx % 10;
nn = xx / 10;
ss = ss + pp.ToString();
}
if(nn!=0)
ss = ss + nn.ToString();
for (int z = ss.Length - 1; z >= 0; z--)
{
u = u + ss.Substring(z, 1);

}
//-------------------------------------


}
for (int f = 1; f <= i; f++)
o = o + "0";
// q = k.ToString() + o;
// k = Convert.ToInt64(q);
// q = "";
u = u + o;
// h = Convert.ToInt32(u) + h;
//----------------------------------
ss = "";
a1 = u;
u = "";
b1 = q;
q = "";
if (a1.Length < b1.Length)
{
y = a1;
a1 = b1;
b1 = y;
}
ll = a1.Length;
lll = b1.Length;
l = ll - lll;

for (int v = 1; v <= l; v++)
d = d + "0";
b1 = d + b1;
d = "";
for (int g = ll - 1; g >= 0; g--)
{
t1 = Convert.ToInt32(a1.Substring(g, 1));
t2 = Convert.ToInt32(b1.Substring(g, 1));
xx = t1 + t2 + nn;
pp = xx % 10;
nn = xx / 10;
ss = ss + pp.ToString();
}
if (nn != 0)
ss = ss + nn.ToString();
for (int z = ss.Length - 1; z >= 0; z--)
{
q = q + ss.Substring(z, 1);

}
//------------
k = 0;
u = "";
o = "";
ss = "";
p = "";



}
textBox3.Text = q.ToString();

FastCode
دوشنبه 22 آذر 1389, 23:06 عصر
State of the art spaghetti
کولاکه.
اولین مشکلی که من میبینم اینه که شما در عملیات جمع و تفریق و ... charcode ها رو از charcode ه 0 کم نمیکنید تا مقدار مطلق عدد نشاندهنده کاراکتر بدست بیاد.
دوباره که کد رو خوندم و ۳۸ ۴۸ رو پیدا نکردم متوجه شدم که دارم هزیون میگم شما اصلاً برای نگهداری جواب یک فضای fixed برای هر رقم یا نگهداری اعشار و علامت و ... نداری.

پیشنهاد میکنم یک بار استاندارد IEEE 754 رو بخونید.

Edit:

(با توجه به پست بعدی)
ببخشید ولی شما کدومها رو ندیدی؟
بنده حداقل سه بار این برنامه رو به زبونهای مختلف نوشتم.
مشکلاتی که من گفتم ضرورتاً باعث نمشیه برنامه خطا بده با کار نکنه.بلکه مشکلات طراحی برنامست.

بزارید یک مقدار فارسی بگم:
اولین مشکلی که به عنوان یک الگوریتم ضرب داره اینه که از parse استفاده کرده. و این در حالیه که خود parse از ضرب استفاده میکنه و این یک مشکل اساسیه.
برای اینکه از متود parse استفاده نکیند باید هر کاراکتر رو از ۴۸ کم کنید.
دومین مشکل هم اینه که الگوریتم شما باید بتونه دقیق بگه که چند بیت برای نگهداری جواب نیاز داری و هر دفعه که یک رقم حساب میشه یک عالمه اطلاعات اینطرف و اونطرف کپی نشه.

hero_2011
سه شنبه 23 آذر 1389, 14:10 عصر
State of the art spaghetti
کولاکه.
اولین مشکلی که من میبینم اینه که شما در عملیات جمع و تفریق و ... charcode ها رو از charcode ه 0 کم نمیکنید تا مقدار مطلق عدد نشاندهنده کاراکتر بدست بیاد.
دوباره که کد رو خوندم و ۳۸ رو پیدا نکردم متوجه شدم که دارم هزیون میگم شما اصلاً برای نگهداری جواب یک فضای fixed برای هر رقم یا نگهداری اعشار و علامت و ... نداری.


پیشنهاد میکنم یک بار استاندارد IEEE 754 رو بخونید.


-----------------------
من که این مشکلات که شما گفتین رو ندیدم :خجالت:
---
خیلی با حال بود من این برنامه رو با دو تا رشته به طول 350 جواب گرفتم.