چطور می تونم در ++C دو عدد که حداکثر 40 رقم هستند را از ورودی بگیرم به طوریکه بتوانم روی این دو عدد4 عمل اصلی را انجام داد
Printable View
چطور می تونم در ++C دو عدد که حداکثر 40 رقم هستند را از ورودی بگیرم به طوریکه بتوانم روی این دو عدد4 عمل اصلی را انجام داد
باید از کلاس hugenumber استفاده کنی .. در واقع خودت باید با استفاده از لیست ها یا رشته ها چهر عمل دستی رو پیاده سازی کنی ..
سلام.
من برنامه ی کاملی به زبان C++ داشتم. براتون به صورت یک فایل zip میگذارم.
البته برنامه با class نوشته شده و من فایل های (.h,.cpp) را براتون گذاشتم.
امیدوارم که مفید باشه؟
سلام من یه برنامه ساده تر می خوام با استفاده از کلاسها که دو تا عدد از ورودی بگیره و 4 عمل اصلی رو روش انجام بده
این برنامه ای که گذاشته شده خیلی پیشرفته تره
در ضمن اگه میشه یه توضیحی در مورد برنامه گذاشته شده بدید و چه جوری عمل کردن ؟Huge?
با سلام.
گفتید توضیح میخواید اومدم توضیح بدم!
بدون کلاس هم میشه نوشت.فقط نیاز به آرایه برای نگهداری عدد هست.
برای عمل جمع فقط یک 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;
}
}
درمورد تقسیم تابحال فکرنکرده ام!