کسی می تونه عمل ضرب اعداد بزرگ در نمایش مستقیم رو انجام بده؟
روش نمایش مستقیم: در این روش عنصر صفرم آرایه با ارزش ترین چهار رقم عدد مربوطه را خواهد داشت و عنصر بعدی آرایه چهار رقم باارزش بعدی را خواهد داشت و الی آخر.:41:
Printable View
کسی می تونه عمل ضرب اعداد بزرگ در نمایش مستقیم رو انجام بده؟
روش نمایش مستقیم: در این روش عنصر صفرم آرایه با ارزش ترین چهار رقم عدد مربوطه را خواهد داشت و عنصر بعدی آرایه چهار رقم باارزش بعدی را خواهد داشت و الی آخر.:41:
دقیقاً تفهمیدم !!!
یعنی تو هر خونه آرایه 4 رقم میره و 4 رقم 4 رقم ضری میشن ؟!!!
آره
همینه که شما گفتی
درسته
اما چجوریه؟؟؟
خوب بعدش که 4 تا 4 تا ضرب کردی چی ؟!!
توضیح بیشتر بده تا بهت بگم ...
تا اینجایی که گفتی باید عددارو 4تا 4تا بندازی تو یه خونه آرایه int بعد هر خونه آرایه رو با خونه متقابلش ضرب کنی ...
بقیشو باید بگی چیکار میخوای بکنی تا بهت بگم :11:
راهنمایی اینکه روی کاغذ دو هدد چند رقمی را ضرب کنید همانطور که میبینید وقتی حاصل ضرب رقم دوم را مینویسید یک شیفت چپ دارید و حاصل جمع این شیفت داده شده ها که تعدادشون برابر با تعداد ارقام طرف دوم ضرب است و....
اینو می دونم فقط!!!:41::13:
میدونم چی میگی اما اینجوری که شما میگین احتیاجی نیست که عدد 4 تا 4 تا جدا شه !!!!
آها گرفتم چجوری شد ! سخته ولی ممکنه :31: حتماً باید جدا کنی ؟ نمیشه جدا نکرده باشه ؟!
اتفاقاً خودمم میخوام ضرب رو برای پروژه پایان ترمم بنویسم ولی هنوز نرفتم سراغش ولی امروز یا فردا میرم سراغش ...
ولی اینیکه من میخوام بنویسم جدا نمیکنم
:20:خوب میشه جدا نکرد.
نمی دونم!!!
ولی من فقط تا شنبه وقت دارم.
Ok
سعی میکنم تا اونموقع بنویسم ...
اما جدا نمیکنم چون اینجوری فقط گیج میشم
من برات الگوریتم ضرب رو میزارم بقیش با خودت :
n تعداد آرایه هست ...
A و B دو آرایه n تایی اند که از ورودی خونده میشن ...
بقیش فک میکنم واضح باشه :11:
کد:C[n-1]=A[n-1]*B[n-1];
C[n-2]=A[n-2]*B[n-1]+A[n-1]*B[n-2];
if(C[n-1]>9)
{
C[n-2]=C[n-2]+C[n-1]/10;
C[n-1]=C[n-1]%10;
}
if(C[n-2]>9)
{
C[n-3]=C[n-3]+C[n-2]/10;
C[n-2]=C[n-2]%10;
}
for(i=n-3;i>0;i--)
{
for(j=0;j<=n-i-1&&i-j>=0;j++)
{
C[i]=C[i]+A[i+j]*B[n-1-j];
}
if(C[i]>=10)
{
C[i-1]=C[i-1]+C[i]/10;
C[i]=C[i]%10;
}
salam
daste shoma dard nakone
in A,B ro az che noii bayad gereft??
man keh harchi minevisam ejra nemishe
mishe komakam konid?? va barnameii keh neveshtido kamel konid baram???
A و B دو آرایه از نوع int هستننقل قول:
شما نمیتونین اعداد رو همینجوری scan کنید باید اول به صورت Char یا کارکتر بخونین بعداً تبدیل به عدد کنین و داخل آرایه قرار بدین
باشه من برات میزارم اما تضمین نمیکنم اینجوری چیزی بفهمی ... اگه خودت بنویسی بهتره :46:
البته احتمالش زیاده که این باگ داشته باشه چون از رو برنامه خودم کپی پیست کردم اونم + - / رو هم داره واسه همین ممکنه چیزایی که باید کپی شه نشده باشه یا چیزی کپی شده باشه که نباید میشده !!
کد:#include "stdafx.h"
کد:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
start: ;
int const n=21;
int A[n]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int B[n]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int C[n]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int m=1,i,j,k;
char ch,opr=';',l,ans_CO,ans_RE;
system("cls");
printf("\n\nEnter Number , Oprator , next number and then enter '=' :\n\n");
En_Num_1: ;
ch=getche(); // enter - + or one number
if(ch=='-')
A[0]=1;
else if(ch=='+')
A[0]=0;
else if(ch>='0'&&ch<='9')
{
for(j=0,l=48;l<58;l++)
{
if(ch==l)
{
A[m]=j;
m++;
}
j++;
}
}
else if(ch=='\b')
{
goto En_Num_1;
}
else
{
printf("\n\nNumber is not valid !!");
printf("\n\nEnter any key to start program again ");
getch();
goto start;
}
for(i=m;i<n;) // enter number 1
{
ch=getche();
if(ch>='0'&&ch<='9') // take it
{
for(j=0,l=48;l<58;l++)
{
if(ch==l)
{
A[i]=j;
i++;
}
j++;
}
}
else if(ch=='*')// May be Oprator typed !
{
opr=ch;
printf("\b %c",opr);
break;
}
else if(ch=='\b') // Backspace
{
printf(" ");
printf("\b");
i--;
A[i]=0;
}
else // error !
{
printf("\n\nNumber is not valid !!");
printf("\n\nEnter any key to start program again ");
getch();
goto start;
}
if(i==0)
goto En_Num_1;
}
if(i!=n) // clean Array A with number 1
{
for(j=i;j>0;j--)
A[j+(n-i)]=A[j];
for(j=1;j<n-i+1;j++)
A[j]=0;
}
Enter_OP : ;
if(opr==';')
{
opr=getche(); // Scan oprator
if(opr=='*')
{
printf("\b %c",opr);
}
else // Oprator not valid
{
printf("\n\nOprator is not valid !!");
printf("\n\nEnter any key to start program again ");
getch();
goto start;
}
}
// Number 2 start
m=1;
printf(" (");
En_Num_2: ;
ch=getche(); // enter - + or one number
if(ch=='-')
B[0]=1;
else if(ch=='+')
B[0]=0;
else if(ch>='0'&&ch<='9')
{
for(j=0,l=48;l<58;l++)
{
if(ch==l)
{
B[m]=j;
m++;
}
j++;
}
}
else if(ch=='\b')
{
printf("(");
goto En_Num_2 ;
}
else // error !
{
printf("\n\nNubmer is not valid !!!");
printf("\n\nEnter any key to start program again ");
getch();
goto start;
}
for(i=m;i<n;) // enter number 2
{
ch=getche();
if(ch>='0'&&ch<='9') // take it
{
for(j=0,l=48;l<58;l++)
{
if(ch==l)
{
B[i]=j;
i++;
}
j++;
}
}
else if(ch=='\b') // Backspace
{
i--;
if(i==0)
{
if(temp==1)
{
printf(" \b");
goto En_Num_2;
}
else if(temp==0)
{
printf("(");
goto En_Num_2;
}
}
B[i]=0;
printf(" ");
printf("\b");
}
else if(ch=='=')
{
printf("\b) = ");
break;
}
else // error !
{
printf("\n\nNubmer is not valid !!!");
printf("\n\nEnter any key to start program again ");
getch();
goto start;
}
if(i==0)
goto En_Num_2;
}
if(i==n)
{
printf(") = ");
}
if(i!=n) // clean Array B with number 1
{
for(j=i;j>0;j--)
B[j+(n-i)]=B[j];
for(j=1;j<n-i+1;j++)
B[j]=0;
}
switch( opr )
{
case '*': // Oprator = *
{
C[n-1]=A[n-1]*B[n-1]; // * number 1
C[n-2]=A[n-2]*B[n-1]+A[n-1]*B[n-2]; // * number 2
if(C[n-1]>9) // if number 1 > 9
{
C[n-2]=C[n-2]+C[n-1]/10;
C[n-1]=C[n-1]%10;
}
if(C[n-2]>9) // if number 2 > 9
{
C[n-3]=C[n-3]+C[n-2]/10;
C[n-2]=C[n-2]%10;
}
for(i=n-3;i>0;i--) // * numbers !
{
for(j=0;j<=n-i-1&&i-j>=0;j++)
{
C[i]=C[i]+A[i+j]*B[n-1-j]; // *
}
if(C[1]>9) // lorger than 20 number
{
printf("\n\n\t\tThe number is too large !");
goto Ask;
}
if(C[i]>=10) // if * > 9
{
C[i-1]=C[i-1]+C[i]/10;
C[i]=C[i]%10;
}
}
if(A[0]==1&&B[0]==0||A[0]==0&&B[0]==1) // C + or - ?
{
C[0]=1;
}
break;
}
default :
{
printf("\n\nYou can only use + & -");
printf("\n\nEnter any key to continue program from start it ");
getch();
goto start;
}
}
if(C[0]==0)
{
printf("+");
}
if(C[0]==1)
{
printf("-");
}
for(i=1;i<n;i++)
printf("%d",C[i]);
}
من این برنامه رو قبلاً نوشتم ،
یعنی یه چیزی شبیه این بود ، برنامه من تو C بود و باید بتونه تا 20 فاکتوریل رو حساب کنه .
واسه اینکار چون 20 فاکتوریل خیلی بزرگ میشه مجبور می شیم از آرایه ها به روشی که گفتی استفاده کنیم
و هر بار یک عدد رو با قبلیش ضرب کنی
اگه فکر می کنی به دردت می خوره دنبالش بگردم...