PDA

View Full Version : دریافت و عملیات روی اعداد بزرگ در ++C



rahnema
شنبه 02 تیر 1386, 08:53 صبح
چطور می تونم در ++C دو عدد که حداکثر 40 رقم هستند را از ورودی بگیرم به طوریکه بتوانم روی این دو عدد4 عمل اصلی را انجام داد

mahan66
شنبه 02 تیر 1386, 10:12 صبح
باید از کلاس hugenumber استفاده کنی .. در واقع خودت باید با استفاده از لیست ها یا رشته ها چهر عمل دستی رو پیاده سازی کنی ..

daneshjo IT
یک شنبه 03 تیر 1386, 17:48 عصر
سلام.
من برنامه ی کاملی به زبان c++ داشتم. براتون به صورت یک فایل zip میگذارم.
البته برنامه با class نوشته شده و من فایل های (.h,.cpp) را براتون گذاشتم.
امیدوارم که مفید باشه؟

pc_pentium_1
چهارشنبه 01 آبان 1387, 17:38 عصر
سلام من یه برنامه ساده تر می خوام با استفاده از کلاسها که دو تا عدد از ورودی بگیره و 4 عمل اصلی رو روش انجام بده
این برنامه ای که گذاشته شده خیلی پیشرفته تره
در ضمن اگه میشه یه توضیحی در مورد برنامه گذاشته شده بدید و چه جوری عمل کردن ؟Huge?

mahboobe.marzban
پنج شنبه 05 آذر 1388, 12:51 عصر
سلام.
من برنامه ی کاملی به زبان C++‎ داشتم. براتون به صورت یک فایل zip میگذارم.
البته برنامه با class نوشته شده و من فایل های (.h,.cpp) را براتون گذاشتم.
امیدوارم که مفید باشه؟



salam pas chera nemishe fili ke zamime kardido download kard?
:متفکر:
hata nashod bazesh konam?
heeeeeeeeeeeeeeeeeeeelp

mortezamsp
پنج شنبه 05 آذر 1388, 18:43 عصر
با سلام.
گفتید توضیح میخواید اومدم توضیح بدم!

بدون کلاس هم میشه نوشت.فقط نیاز به آرایه برای نگهداری عدد هست.
برای عمل جمع فقط یک for میخواید که هربار عددی رو از هر دو آرایه بگیره و با رقم نقلی جمع بزنه و در آرایه جواب قرار بده.

int carry=0;
int sum;
for(i=lenth-1;i>=0;i--)
{
sum=a[i]+b[i]+carry;
c[i]=sum%10;
carry=sum/10;
}
و برای ضرب هم باید بکمک دو for همه اعضای آرایه اول رو در اعضای آرایه دوم ضرب کنی و برای هر حاصل ضرب نتیجه رو با رقم نقلی جمع بزنی و در آرایه سوم بریزی.نکتش فقط اینه که اندیس آرایه سوم باید بعد از هربار اجرای for داخلی (به ازای هر عدد از آرایه اولی ) یکی عقب بیاد.تو عمل ضرب دستی هم همین کار رو انجام میدیم.

int carry,mul,col=0;
for(i=a_lenth-1;i>=0;i--)
{
carry=0;
for(j=b_lenth-1;j>=0;j--)
{
mul=(a[i]*b[j])+carry;
c[j-col]+=mul%10;
carry=mul/10;
}
col++;
}

تفریق هم به این ترتیبه که اگر عملوند اول از عملوند دوم کمتر بود،عملوند اول رو با 10 جمع میکنی و متغیر carry رو یک میکنی و حالا دفعه بعد اگه carry یک بود و عملوند اول صفر نبود از اون یه واحد کم میکنی و carry رو صفرمیکنی ، و اگر صفر بود عملوند اول رو 9 میگیری و carry رو دست نمیزنی.البته همه اینها بشرطی هستن که عملوند اول از دوم کوچکتر باشه.

int carry=0;
for(i=lenth-1;i>=lenth-a_lenth;i--)
{
c[i]=a[i]-b[i];
if(carry==1)
{
if(a[i]==0)
c[i]+=9;
else
{
c[i]--;
carry=0;
if(c[i]<0)
{
c[i]+=10;
carry=1;
}
}
}
if(c[i]<0)
{
c[i]+=10;
carry=1;
}
}

درمورد تقسیم تابحال فکرنکرده ام!