PDA

View Full Version : ماشین حساب برای اعداد بزرگ



saber187518
دوشنبه 20 دی 1389, 01:13 صبح
سلام دوستان عزیز
من برنامه زیر رو نوشتم.
برای جمع و تفریق درست جواب میده.
اما وقتی که میخوام ضرب رو بنویسم متاسفانه گیر میزنم.
دوستان لطفا کمکم کنین
فردا باید تحویلش بدم.
ممنون میشم.


#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
#include <stdio.h>
#include <string.h>
void add(int[],int[],int[]);
void add1(int[],int[]);
void sub(int[],int[],int[]);
void mul(int[],int[],int[]);
void div(int[],int[],int[]);
void sub1(int[],int[],int[]);
int min(int[]);
int n_1,n_2,r_;
int main()
{
clrscr();
char n1[100],n2[100],r[100],ch,select;
int number1[100],number2[100],result[200];
int i;
while(1)
{
n_1=0;
n_2=0;
r_=0;
for (i=0;i<100;i++)
{
number1[i]=0;
number2[i]=0;
n1[i]=48;
n2[i]=48;
}
for (i=0;i<200;i++)
{
result[i]=0;
r[i]=48;
}
clrscr();
cout <<"enter first number (MAX 100 DIGIT):\n";
cin >> n1;
n_1=strlen(n1);
cout <<"\n"<<n_1<<"\n";
cout <<"enter towice number (MAX 100 DIGIT):\n";
cin >>n2;
n_2=strlen(n2);
cout <<"\n"<<n_2<<"\n";
clrscr();
cout <<"selection an item:\n";
cout <<"1.add\n";
cout <<"2.sub\n";
cout <<"3.mul\n";
cout <<"4.div\n";
cout <<"5.exit";
select=getch();
clrscr();
for (i=0;i<n_1;i++)
number1[i]=n1[i]-48;
for (i=0;i<n_2;i++)
number2[i]=n2[i]-48;
switch (select)
{
case '1':
cout <<"your selection is add tow number.\n";
cout <<"your answer is:\n";
add(number1,number2,result);
for (i=200;i>=0;i--)
cout <<result[i];
getch();
break;
case '2':
cout <<"your selection is sub tow number.\n";
cout <<"your answer is:\n";
if(n_1>=n_2)
{
sub(number1,number2,result);
for (i=200;i>=0;i--)
cout <<result[i];
}
if(n_1<n_2)
{
sub1(number2,number1,result);
cout <<"-";
for (i=200;i>=0;i--)
cout <<result[i];
}
getch();
break;
case '3':
cout <<"your selection is mul tow number.\n";
cout <<"your answer is:\n";
mul(number1,number2,result);
for (i=200;i>=0;i--)
cout <<result[i];
//cout <<r_;
getch();
break;
case '4':
cout <<"your selection is div tow number.\n";
cout <<"your answer is:\n";
getch();
break;
case '5':
cout <<"are you sure to exit of program (y/n):";
ch=getch();
if(ch=='y' || ch=='Y')
exit(0);
break;
default:
cout <<"error in selection.\n";
cout <<"please try again.\n";
cout <<"press any key to continue...";
getch();
break;
}
}
getch();
return 0;
}
//*****************************************add****** ************************
void add(int number1[100],int number2[100],int result[200])
{
int i=n_1-1,j=n_2-1,k=0,temp=0,carry=0;
while(i>=0 && j>=0)
{
temp=number1[i]+number2[j]+carry;
result[k]=temp%10;
carry=temp/10;
k++;
r_++;
i--;
j--;
}
while(i>=0)
{
temp=number1[i]+carry;
result[k]=temp%10;
carry=temp/10;
k++;
r_++;
i--;
}
while(j>=0)
{
temp=number2[j]+carry;
result[k]=temp%10;
carry=temp/10;
k++;
r_++;
j--;
}
result[k]=carry;
}
//*****************************************sub****** ************************
void sub(int number1[100],int number2[100],int result[200])
{
int i=n_1-1,j=n_2-1,k=0;
while(i>=0 && j>=0)
{
if(number1[i]>=number2[j])
{
result[k]=number1[i]-number2[j];
i--;
j--;
k++;
r_++;
}
else
{
result[k]=(number1[i]+10)-number2[j];
number1[i-1]--;
i--;
j--;
k++;
r_++;
}
}
while(i>=0)
{
result[k]=number1[i];
k++;
r_++;
i--;
}
}
//*****************************************sub1***** *************************
void sub1(int number2[100],int number1[100],int result[200])
{
int i=n_1-1,j=n_2-1,k=0;
while(i>=0 && j>=0)
{
if(number2[j]>=number1[i])
{
result[k]=number2[j]-number1[i];
i--;
j--;
k++;
r_++;
}
else
{
result[k]=(number2[j]+10)-number1[i];
number2[j-1]--;
i--;
j--;
k++;
r_++;
}
}
while(j>=0)
{
result[k]=number2[j];
k++;
r_++;
j--;
}
}
//*****************************************mul****** ************************
void mul(int number1[100],int number2[100],int result[200])
{
int i,j,k,t;
t=1;
if(min(number2)==0)
t=0;
while(t)
{
add1(number1,result);
if(min(number2)==0)
t=0;
}
}
//*****************************************div****** ************************
//*****************************************min****** ************************
int min (int number2[100])
{
int i,j;
for (i=n_2-1;i>=0;i--)
if(number2[i]>0)
goto l1;
return 0;
l1:
for (i=n_2-1;i>=0;i--)
if(number2[i]>0)
{
number2[i]--;
if(number2[i]==0)
for (j=i+1;j<n_2;j++)
number2[j]=9;
}
//number2[n_2-1]--;
return 1;
}
//*****************************************add1***** *************************
void add1(int number1[100],int result[200])
{
int i=n_1-1,k=0,temp=0,carry=0;
while(i>=0 && k>=0)
{
temp=number1[i]+result[k]+carry;
result[k]=temp%10;
carry=temp/10;
k++;
r_++;
i--;
}
while(i>=0)
{
temp=number1[i]+carry;
result[k]=temp%10;
carry=temp/10;
k++;
r_++;
i--;
}
while(k<=200)
{
temp=result[k]+carry;
result[k]=temp%10;
carry=temp/10;
k++;
r_++;
}
result[k]=carry;
}

Arcsinos
دوشنبه 20 دی 1389, 10:39 صبح
دوست عزیز اینجا (http://barnamenevis.org/showthread.php?226788-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D8%AA%D9%82%D8%B3%DB%8C%D9%85-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D8%A7%DB%8C) رو ببین

saber187518
دوشنبه 20 دی 1389, 13:41 عصر
سلام دوست عزیز
واقعا نمیدونم چطور باید این لطفت رو جبران کنم.
باور کن 2 شب نخوابیدم.
اما جواب نگرفتم.
خداوند اجرت بده.