بالمناسبة يبدو أني نسيت وضع حلي :blush:
هذا هو
#include"iostream"
#include"conio.h"
using namespace std;
int const size=10,size_c=size+1;
int a[size],b[size],c[size_c];
bool sign=false;
bool is_grater_than_or_equal(int[],int[]);
bool is_eqal_zero(int[],int);
void sub_num(int[],int[]);
void sub(int[],int[]);
void put_zero(int[],int);
void print_number(int[],int);
void addition(int[],int[],int,int);
void enter_number(int[]);
int main()
{
char choic;
cout<<"Enter the first unsigned integer number : "<<endl;
enter_number(a);
cout<<"\nEnter the seconed unsigned integer number : "<<endl;
enter_number(b);
while(1)
{
xx: cout<<"\n\n1) addition"<<endl
<<"2) subtraction"<<endl
<<"3)exit"<<endl
<<"enter the operation you need it: "<<endl;
cin>>choic;
switch(choic)
{
case '1':
addition(a,b,size,size);
break;
case '2':
sub_num(a,b);
break;
case '3':
exit(0);
default:
cout<<"error input tray again!"<<endl;
goto xx;
}
cout<<"\nthe first number is:"<<endl<<" ";
print_number(a,size);
cout<<"\nthe seconed number is:"<<endl<<" ";
print_number(b,size);
cout<<"\nthe resulte is:"<<endl;
if(sign)
cout<<'-';
print_number(c,size_c);
put_zero(c,size_c);
}
return 0;
}
void enter_number(int array[])
{
int i=0,x;
while(i<size)
{
x=getch();
if(x==8 && i)
{
putch(8);
putch(0);
putch(8);
i--;
}
if(x>=48 && x<=57)
{
array=x-48;
putch(x);
i++;
}
}
}
void addition(int arraya[],int arrayb[],int size_a,int size_b)
{
int i,j,k,temp;
for(i=size_a-1,k=size_b-1,j=size_c-1;i>=0;i--,j--,k--)
{
temp=arraya+arrayb[k];
c[j-1]+=(c[j]+temp)/10;
c[j]=(c[j]+temp)%10;
}
}
bool is_grater_than_or_equal(int arraya[],int arrayb[])
{
int i;
for(i=0;i<size;i++)
{
if(arraya==arrayb)
continue;
if(arraya>arrayb)
return true;
else
return false;
}
return true;
}
void copy_number(int arraya[],int arrayb[],int size)
{
for(int i=0;i<size;i++)
arrayb=arraya;
}
void print_number(int array[],int size)
{
if(is_eqal_zero(array,size))
{
cout<<0;
return;
}
bool find=true;
int i;
for(i=0;i<size;i++)
{
cout<<array;
}
cout<<endl;
}
bool is_eqal_zero(int array[],int size)
{
for(int i=0;i<size;i++)
{
if(array!=0)
return false;
}
return true;
}
void put_zero(int array[],int size)
{
for(int i=0;i<size;i++)
array=0;
}
void sub(int arraya[],int arrayb[])
{
for(int i=size-1,j=size_c-1;i>=0;i--,j--)
{
if(arraya<arrayb)
{
arraya+=10;
arraya[i-1]--;
}
c[j]=arraya-arrayb;
}
}
void sub_num(int arraya[],int arrayb[])
{
int temp[size];
if(is_grater_than_or_equal(arraya,arrayb))
{
copy_number(arrayb,temp,size);
sub(arraya,temp);
sign=true;
}
else
{
sign=true;
copy_number(arraya,temp,size);
sub(arrayb,temp);
}
}هنالك أمر أرى أن الجميع وقع به ونسيت ذكرة في ردي السابق
وهو أن الجميع إعتبر الإدخال كمصفوفة string وهذه ليست مشكلة ولكن المشكلة هو عدم وضع شرط يمنع من إدخال أي حرف أو رمز أو أي شيئ غير الأعداد :)
بالنسبة لبقية الحلول سأرى أصحابها وأضعها بإذن الله :)
تم تعديل هذه المشاركة بواسطة أبو دحيم في 21 يوليو 2010 في 18:44

