منظور از اعداد بزرگ اعدادی با تعداد رقمای بالای 308 تا است. اکثر زبان های برنامه نویسی تا 308 رقم محاسبات رو انجام میدن. ولی برای محاسبات بیشتر باید برنامه مربوط به اونا رو نوشت. الگوریتم جمع خیلی ساده است. اگر دو تا عدد به شما بدن چه طوری اونا رو جمع می کنید؟ معلومه، از سمت راست رقم اول عدد اول با رقم اول عدد دوم جمع میشه. یکان این حاصلجمع میشه رقم اول سمت راست جواب و دهگان این حاصلجمع باید با جمع ارقام دوم جمع بشه و به همین ترتیب تا آخر ادامه پیدا کنه. این همون الگوریتمی هستش که اولین بار توی دبستان به ما یاد میدن!! نکته مهمی که باید به اون توجه کرد اینه که برای نمایش هر عدد باید از یک آرایه استفاده کرد. و برای اینکه آرایه ها فضای زیادی رو اشغال نکنن بهتره که از نوع بایت یا کاراکتری استفاده بشه. در اینجا هر عضو آرایه یا رشته یک رقم محسوب میشه. فقط در مورد جمع دقت کنید که مثلا حاصلجمع دو عدد 100 رقمی حداکثر ممکنه 101 رقمی بشه و نه بیشتر. پس اگر دو عدد اول رو 100 رقمی انتخاب می کنید حتما آرایه ای که برای جواب استفاده می کنید باید 101 عضوی باشه تا مشکلی پیش نیاد. خوب اینم برنامه جمع اعداد بزرگ در زبان سی:
[/SIZE]اما در مورد تفریق اعداد بزرگ روش کار فرق می کنه. الگوریتمی که ما داریم فقط برای کم کردن اعداد کوچکتر از اعداد بزگتر هست. مثلا کم کردن 77 از 100. ولی برای کم کردن 100 از 77 ما اول 77 رو از 100 کم می کنیم و بعد جلوش یه منفی میزاریم. روش کار الگوریتم ما هم به این صورته. پس اول باید ببینیم کدوم عدد بزرگتره.و بعد عدد بزرگتر رو از عدد کوچکتر کم کنیم. نکته دیگه در مورد تفریق اعداد اینه که برای جواب تفریق از نوع بایت یا کاراکتری استفاده نکنید، چون توی محاسبات اعداد منفی هم ظاهر میشن. این هم برنامه اش:
[/SIZE]
__________________
کد:
[SIZE=4]
[/SIZE][LEFT][SIZE=4]#include <stdio.h>
#include <string.h>
#include <conio.h>
main()
{
char a[100],b[100];
int c[101]={0};
printf("\n");
gets(a);
gets(b);
int max=strlen(a)>strlen(b) ? strlen(a):strlen(b);
int i,j,k,ta,tb;
for (i=max,j=strlen(a)-1,k=strlen(b)-1 ; i>0 ; i--,j--,k--)
{
if (j<0) ta=0;
else ta=a[j]-48;
if (k<0) tb=0;
else tb=b[k]-48;
c[i]+=(ta+tb);
c[i-1]=c[i] / 10;
c[i]=c[i] % 10;
}
printf("\na+b: ");
for (i=0; i<=max ; i++)
{
//c[i]+=48;
printf("%d",c[i]);
}
getch();
}[/SIZE][/LEFT]
[SIZE=4]
کد:
[SIZE=4]
[/SIZE][LEFT][SIZE=4]#include <stdio.h>
#include <string.h>
#include <conio.h>
int bigger(char a[100],char b[100])
{
// this function retun 1 if a>=b else rerun 0
if (strlen(a)<strlen(b)) return 0;
else if (strlen(a)>strlen(b)) return 1;
int i;
for (i=0;i<strlen(a);i++)
{
if (a[i]>=b[i]) return 1;
else return 0;
}
return 1;
}
main()
{
char a[100],b[100];
int d[101]={0};
printf("\n");
gets(a);
gets(b);
int max=strlen(a)>strlen(b) ? strlen(a):strlen(b);
int i,j,k,ta,tb;
printf("\na-b: ");
int change=0;
if (!bigger(a,b))
{
char temp;
for (i=0;i<100;i++)
{
temp=a[i];
a[i]=b[i];
b[i]=temp;
}
change=1;
}
for (i=max,j=strlen(a)-1,k=strlen(b)-1 ; i>0 ; i--,j--,k--)
{
if (j<0) ta=0;
else ta=a[j]-48;
if (k<0) tb=0;
else tb=b[k]-48;
d[i]+=ta-tb;
if (d[i]<0)
{
d[i-1]=-1;
d[i]+=10;
}
}
if (change) printf("-");
for (i=0;i<=max;i++)
printf("%d",d[i]);
getch();
}[/SIZE][/LEFT]
[SIZE=4]
__________________