سلام دوستان
اه امکانش هست سورس جمع و ضرب دو عدد 20 رقمی رو بزارین
بهش خیلی نیاز دارم
ممنونم.
سلام دوستان
اه امکانش هست سورس جمع و ضرب دو عدد 20 رقمی رو بزارین
بهش خیلی نیاز دارم
ممنونم.
سلام.خوبي.
اگه اون جواب 10000 رقمي رو بدست اوردي.
يه كپي به ميلم بفرست.چون خيلي احتياج دارم.
ممنون
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
اگر دانشجوي كامپيوتر باشيد به ياد داري كه در طراحي الگوريتم ها براي اعداد بسيار بزرگي كه در موقع جمع كردن سرريز مي شوند و يا اعدادي كه بسيار بزرگند متغيير هايي تعريف مي كرديم واعداد شكسته شده را در آن مي ريختيم و اين كار شكستن را انقدر ادامه مي داديم كه ديگر نيازي به شكستن نباشد وبعد مرتبا انها را باهم جمع مي كنيم و در يكي از متغيير ها مي ريزيم تا نهايتا عدد نهايي ساخته شود
اميدوارم فهميده باشيد
سلام به همگي
اين سوال رو من نوشتم البته ضربشو و با آرايه ولي متاسفانه تا 20 رقم
#include<iostream.h>
#include<conio.h>
void main(void)
{
l:
int a[10],b[10],c[20],i,j,k,temp=0,bagi=0,temp1=0,sefr=0,key=0;
char ch;
cout<<"----------------------------------START------------------------------------------";
cout<<endl;
for (i=0;i<10;i++)
{
cout<<"Please Enter The Frist Number "<<i<<"=";
cin>>a[i];
}
for (i=0;i<10;i++)
{
cout<<"Please Enter The Second Number "<<i<<"=";
cin>>b[i];
}
for (i=0;i<20;i++)
c[i]=0;
for (i=9;i>=0;--i)
{
temp=0;
bagi=0;
temp1=0;
for (j=9;j>=0;--j)
{
k=b[i]*a[j]+temp;
temp=k / 10;
bagi=k % 10;
c[(j-sefr)+10]=c[(j-sefr)+10]+bagi+temp1;
temp1=c[(j-sefr+10)]/10;
c[(j-sefr)+10]=c[(j-sefr)+10]%10;
if (j==0)
{
c[(j-sefr)+9]=temp;
c[(j-sefr)+9]=c[(j-sefr)+9]+temp1;
}
}
++sefr;
}
cout<<endl;
cout<<endl;
cout<<endl;
cout<<"Result: ";
for (i=0;i<10;i++)
{
cout<<a[i];
}
cout<<" * ";
for (i=0;i<10;i++)
{
cout<<b[i];
}
cout<<" = ";
for (i=0;i<20;i++)
{
cout<<c[i];
}
cout<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<"Press 1 & Enter To Cuntinue Press Any Key & Enter For Exit...";
cin>>key;
if (key==1)
goto l;
}
يه الگوريتم ساده
كه ابتدا دو تا عدد ده رقمي رو مي گيره وداخل آرايه قرار مي ده و سپس از آخر به همان روش ضرب ابتدايي با هم ضرب مي كنه و اگر عدد بزرگتر از 10 شد با قي مونده اونو حساب كرده و سپس خارج قسمت رو بدست آورده و به خانه ي بعدي اضافه مي كنه به همين سادگي
عمرا اگه فهميده باشي
سلام
واسه این کار از پشته پیوندی باید استفاده کنی (البته همونطور که دوستان هم گفتن از آرایه میتونی استفاده کنی ولی این کار بهیچ وجه توصیه نمیشه و از لحاظ مهندسی نرم افزار هم یک کار اشتباهه)
برای شروع کافیه 2 تا پشته ایجاد کنی (اعضای پشته byte ) توابع حذف و اضافه node رو بنویسی (بصورت پیوندی) و در نهایت در زمان اجرا با فشردن هر کاراکتر یکی به پشته ات اضافه کنه(در صورتی که ورودی قابل قبول باشه) و با فشرن هربار کلید بک اسپیس (کاراکتر 8 ) یک گره حذف کنه ، در نهایت یه پشته پر داری ولی یه مشکل هست اگه بخوای نمایشش بدی رشته رو معکوس نمایش میده اگه نخوای خیلی وقتت گرفته بشه کافیه STACK رو معکوس کنی و نمایشش بدی ولی اگه هدفت جمع یا تفریقه پیش از اینکه پشته رو معکوس کنی عمل جمع یا تفریق رو به راحتی میتونی انجام بدی و در نهایت پشته رو معکوس کنی .
چند ترم پیش یه برنامه عدد 60 رقمی واسه یکی از بچه ها نوشته بودم اگه پیداش کردم واست میزارم کمکت میکنه
کسی الگوریتم تفریق را با استفاده از رقم نقلی و آرایه بلده؟
من یه برنامه ای نوشتم ولی درست کار نمیکنه؟اگه با تصحیح همین برنامه الگوریتم تفریق درست کار کنه ممنون میشم چون میتونم راحت بفهمم چی به چیه؟
#include <conio.h>
#include <stdio.h>
#include <string.h>
main()
{
char num1[50],num2[50],javab[50],help[50];
int i,j,carry=0,r,x11,x22,k=0,sw=0,sz=1;
clrscr();
gets(num1);
gets(num2);
if (strlen(num1)<strlen(num2))
{
strcpy(help,num1);
strcpy(num1,num2);
strcpy(num2,help);
sz=-1;
}
else if (strlen(num1)==strlen(num2))
{
if (num1[0]<num2[0])
{
strcpy(help,num1);
strcpy(num1,num2);
strcpy(num2,help);
sz=-1;
}
}
i=strlen(num1)-1;
j=strlen(num2)-1;
for(;i>=0||j>=0;i--,j--)
{
if(i>=0)
{
x11=num1[i]-48;
if(sw==1)
{
x11=num1[i]-49;
sw=0;
}
}
else
x11=0;
if(j>=0)
x22=num2[i]-48;
else
x22=0;
if (x11<x22)
{
x11=x11+10;
r=x11-x22+carry;
sw=1;
}
else
r=x11-x22+carry;
javab[k++]=(r%10)+48;
carry=r/10;
}//end for
javab[k]='\0';
strrev(javab);
if (sz==-1)
printf ("result is:-%s",javab);
else
printf("result is:%s",javab);
getch();
}//end main
كد زيرو ببين
مشكلي داشتي بپرس
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بالاخره برنامه تفریق دو رشته رو تقریبا کامل نوشتم
#include <conio.h>
#include <stdio.h>
#include <string.h>
main()
{
char num1[50],num2[50],javab[50],help[50];
int i,j,carry=0,r,x11,x22,sw=0,k=0,sz=1;
clrscr();
gets(num1);
gets(num2);
if (strlen(num1)<strlen(num2))
{
strcpy(help,num1);
strcpy(num1,num2);
strcpy(num2,help);
sz=-1;
}
i=strlen(num1)-1;
j=strlen(num2)-1;
for(;i>=0||j>=0;i--,j--)
{
if(i>=0)
x11=num1[i]-48;
else
x11=0;
if(j>=0)
x22=num2[j]-48;
else
x22=0;
if (sw==1)
if (x11<x22)
{
x11=x11+9;
r=x11-x22+carry;
}
else if (x11>x22)
{
x11=x11-1;
r=x11-x22+carry;
sw=0;
}
else //x11==x22
{
x11=x11+9;
r=x11-x22+carry;
}
if (sw==0)
if (x11<x22)
{
x11=x11+10;
r=x11-x22+carry;
sw=1;
}
else //x11>x22
r=x11-x22+carry;
javab[k++]=(r%10)+48;
carry=r/10;
}//end for
javab[k]='\0';
strrev(javab);
if (sz==-1)
printf ("-%s",javab);
else
printf("%s",javab);
getch();
}//end main
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)