Bignum--updated

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#1
سلام به همه
دو تا سوال bignum تو کلاسهای عملی دوره به ما داده بودن که همینجا می ذارمشون. می تونید کدهاتون رو بذارین ، من هم کدها را با Judge خودمون چک می کنم. آخرش کد خودمم می ذارم. فقط لطفا استاندارد ورودی و خروجی رو رعایت کنید و بگید که برای کدوم سوال کد زده اید. آخر همه ی برنامه هاتون حتما حتما endl بذارین.


سوال اول:
http://www.free-picture-host.com/viewimage.php?file=/images/oqF1Yb1281609396.png

سوال دوم:
http://www.free-picture-host.com/viewimage.php?file=/images/0CQrSU1281609496.png

ببخشید که عکس گذاشتم.
<IMG src=modules/forums/images/smiles/53.gif></IMG src=modules/forums/images/smiles/53.gif>
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#2
سلام و درود!!!!!!!

نميشه اعداد رو در قالب آرايه بگيره؟؟؟؟؟؟؟؟!!!!!
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#3
هر طوری که دوست دارید بگیرید. من فقط کد شما رو به تستر می دهم.
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#4
اين كد منه كه براي جمع نوشتم البته يكم غير استاندارده !!!!
....با آرايه نوشتم اما يه نكته اي كه بايد بگم اينه كه بايد به تعداد لازم قبل از عدد موردنظر صفر بزنيد!!!!


کد
#include <conio.h>
#include <iostream>
#include <string.h>
using namespace std; 
 int main()
   {
	 const int max=20;
	 int a[max],b[max],c[max];
	 for(int i=0;i<max;i++)
	  cin>>a[i];
	 for(int j=0;j<max;j++)
	  cin>>b[j];
	 for(int i=0;i<max;i++)
		 c[i]=a[i]+b[i];
	 for(int h=max;h>=0;h--)
	  { 
	    if(c[h]>=10)
		  {
		    int carry=c[h]/10;
		    c[h]%=10;
		    c[h-1]+=carry;
		  }
	    }
	 for(int u=0;u<max;u++)
	  cout<<c[u];
	 getch();
	 return 0;
	 
   }
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
#5
olympiad کدت چطوری کار می کنه؟!؟

اینم کد من برای مجموع :(حداقل باعث شد رشته ها رو یاد گیرم
)

البته یه چیزی ، من عدد ها رو منفی در نظر نگرفتم اگه منفی هم داره بگید تا درستش کنم.

[center:fa2c3ae580]در snip
[/center:fa2c3ae580]
کد
#include <stdio.h>
#include <conio.h>
int main()
{
    char s1[300],s2[300];
    int ragham1[300],ragham2[300],sum[500],k1=0,k2=0;
    ragham1[0]=0;
    ragham2[0]=0;
    sum[0]=0;
    scanf("%s%s",&s1,&s2);
   
    for(int i=0;s1[i];i++)
    {
		  if(s1[i]=='0') ragham1[i+1]=0;
		  if(s1[i]=='1') ragham1[i+1]=1;
		  if(s1[i]=='2') ragham1[i+1]=2;
		  if(s1[i]=='3') ragham1[i+1]=3;
		  if(s1[i]=='4') ragham1[i+1]=4;
		  if(s1[i]=='5') ragham1[i+1]=5;
		  if(s1[i]=='6') ragham1[i+1]=6;
		  if(s1[i]=='7') ragham1[i+1]=7;
		  if(s1[i]=='8') ragham1[i+1]=8;
		  if(s1[i]=='9') ragham1[i+1]=9;
		  k1++;
    }

    for(int i=0;s2[i];i++)
    {
		  if(s2[i]=='0') ragham2[i+1]=0;
		  if(s2[i]=='1') ragham2[i+1]=1;
		  if(s2[i]=='2') ragham2[i+1]=2;
		  if(s2[i]=='3') ragham2[i+1]=3;
		  if(s2[i]=='4') ragham2[i+1]=4;
		  if(s2[i]=='5') ragham2[i+1]=5;
		  if(s2[i]=='6') ragham2[i+1]=6;
		  if(s2[i]=='7') ragham2[i+1]=7;
		  if(s2[i]=='8') ragham2[i+1]=8;
		  if(s2[i]=='9') ragham2[i+1]=9;
		  k2++;
    }
//----------------
if(k1==k2){
for(int i=k1;i>0;i--)
{
	   if(ragham1[i]+ragham2[i]<10)
	   sum[i]=ragham1[i]+ragham2[i];
	   if(ragham1[i]+ragham2[i]>=10 && i>1)
	   {sum[i]=(ragham1[i]+ragham2[i])%10;  ragham2[i-1]+=((ragham2[i]+ragham1[i])/10)%10;}
	   
	   if(ragham1[i]+ragham2[i]>=10)
	   {sum[1]=ragham1[1]+ragham2[1];}
	   
}

for(int i=1;i<=k1;i++)
{
	 printf("%d",sum[i]);
} 
	    }

//--------------
if(k1>k2){
		int n=ragham2[2];
		if((k1-k2)<k2) {for(int i=k2;i>1;i--){	
		ragham2[i+(k1-k2)]=ragham2[i];
		ragham2[2]=n;}}
		for(int i=1;i<=(k1-k2);i++){
		ragham2[i+(k1-k2)]=ragham2[i];
		ragham2[i]=0;}
		
		for(int i=k1;i>0;i--)
{
	   if(ragham1[i]+ragham2[i]<10)
	   sum[i]=ragham1[i]+ragham2[i];
	   if(ragham1[i]+ragham2[i]>=10)
	   {sum[i]=(ragham1[i]+ragham2[i])%10;  ragham2[i-1]+=((ragham2[i]+ragham1[i])/10)%10;}
	   if(ragham1[i]+ragham2[i]>=10)
	   {sum[1]=ragham1[1]+ragham2[1];}
}

for(int i=1;i<=k1;i++)
{
	 printf("%d",sum[i]);
} 
	    }
//-----------------
if(k1<k2){
		int n=ragham1[2];
		if((k2-k1)<k1) {for(int i=k1;i>1;i--){	
		ragham1[i+(k2-k1)]=ragham1[i];
		ragham1[2]=n;}}
		for(int i=1;i<=(k2-k1);i++){
		ragham1[i+(k2-k1)]=ragham1[i];
		ragham1[i]=0;}
		
		for(int i=k2;i>0;i--)
{
	   if(ragham2[i]+ragham1[i]<10)
	   sum[i]=ragham2[i]+ragham1[i];
	   if(ragham2[i]+ragham1[i]>=10)
	   {sum[i]=(ragham2[i]+ragham1[i])%10;  ragham2[i-1]+=((ragham2[i]+ragham1[i])/10)%10;}
	   if(ragham1[i]+ragham2[i]>=10)
	   {sum[1]=ragham1[1]+ragham2[1];}
}

for(int i=1;i<=k2;i++)
{
	 printf("%d",sum[i]);
} 
	    }		
    getch();
    return 0;
}
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#6
چه كد جالبي نوشتي!!!!!!!!!!!!!!!!!!!
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#7
به rezashiri :

گفتم كه!!!!!
الان max تو كد بالايي 20 هست مثلا اگه بخواي دو تا عدد رو جمع كني بايد به تعداد لازم صفر بزني!!!!
مثلا فرض كن مي خواي 159 و 785 رو جمع كني ... بايد اينجوري بنويسي :

کد
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 5 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 5
مي دونم كد مسخره اي!!!!! لازم نيست بگي !!؟؟

من هنوز اين رشته ها رو نفهميدم ......... ابهام داره!!!!!!!!!!!
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#8
Olympiad گفت
اين كد منه كه براي جمع نوشتم البته يكم غير استاندارده !!!!
....با آرايه نوشتم اما يه نكته اي كه بايد بگم اينه كه بايد به تعداد لازم قبل از عدد موردنظر صفر بزنيد!!!!


کد
#include <conio.h>
#include <iostream>
#include <string.h>
using namespace std; 
int main()
   {
	 const int max=20;
	 int a[max],b[max],c[max];
	 for(int i=0;i<max;i++)
	  cin>>a[I];
	 for(int j=0;j<max;j++)
	  cin>>b[j];
	 for(int i=0;i<max;i++)
		 c[I]=a[I]+b[I];
	 for(int h=max;h>=0;h--)
	  { 
	    if(c[h]>=10)
		  {
		    int carry=c[h]/10;
		    c[h]%=10;
		    c[h-1]+=carry;
		  }
	    }
	 for(int u=0;u<max;u++)
	  cout<<c[U];
	 getch();
	 return 0;
	 
   }
[/U][/I][/I][/I][/I]


باید صفرهاشو خودتون بذارین<IMG src=modules/forums/images/smiles/53.gif>

</IMG src=modules/forums/images/smiles/53.gif>
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#9
Olympiad گفت
اين كد منه كه براي جمع نوشتم البته يكم غير استاندارده !!!!
....با آرايه نوشتم اما يه نكته اي كه بايد بگم اينه كه بايد به تعداد لازم قبل از عدد موردنظر صفر بزنيد!!!!


کد
#include <conio.h>
#include <iostream>
#include <string.h>
using namespace std; 
int main()
   {
	 const int max=20;
	 int a[max],b[max],c[max];
	 for(int i=0;i<max;i++)
	  cin>>a[I];
	 for(int j=0;j<max;j++)
	  cin>>b[j];
	 for(int i=0;i<max;i++)
		 c[I]=a[I]+b[I];
	 for(int h=max;h>=0;h--)
	  { 
	    if(c[h]>=10)
		  {
		    int carry=c[h]/10;
		    c[h]%=10;
		    c[h-1]+=carry;
		  }
	    }
	 for(int u=0;u<max;u++)
	  cout<<c[U];
	 getch();
	 return 0;
	 
   }
[/U][/I][/I][/I][/I]



Compiling ...
/var/www/inoi/web/uploads/assets/subs/3604/prog.cpp:29:6: warning: no newline at end of file
=================
Test #00:
WRONG!
Judge Finished......
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#10
این هم نتایج تست آقای شیری:

Compiling ...
/var/www/inoi/web/uploads/assets/subs/3605/prog.cpp:113:3: warning: no newline at end of file
=================
Test #00:
OK!
Test #01:
OK!
Test #02:
OK!
Test #03:
OK!
Test #04:
WRONG!
Judge Finished......
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
#12
Goharshady گفت
این هم نتایج تست آقای شیری:

Compiling ...
/var/www/inoi/web/uploads/assets/subs/3605/prog.cpp:113:3: warning: no newline at end of file
=================
Test #00:
OK!
Test #01:
OK!
Test #02:
OK!
Test #03:
OK!
Test #04:
WRONG!
Judge Finished......
برای no newline at end of file که WRONG نمی خوره؟

چند تا تست داره؟!؟
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#13
به حسام:
اولا که قرار نیست اولش صفر بذاریم!
دوما باید ببینید چرا wrong میشه! اون هم در تست اول که همون 0+0 است!
این هم کد من که accept شد:
http://snipt.net/Goharshady/bignum-sum
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#14
rezashiri گفت
Goharshady گفت
این هم نتایج تست آقای شیری:

Compiling ...
/var/www/inoi/web/uploads/assets/subs/3605/prog.cpp:113:3: warning: no newline at end of file
=================
Test #00:
OK!
Test #01:
OK!
Test #02:
OK!
Test #03:
OK.!
Test #04:
WRONG!
Judge Finished......
برای این که no newline at end of file که ، WRONG نمی خوره؟

چند تا تست داره؟!؟

10 تا تست داره
wrong شدن هم به اون دلیل نیست. چون چندتا تست اول accept شده.
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#15
خوب معلومه كه چرا wrong ميشه ... چون كه بايد 20 تا صفر براي هر كدوم بذاره...الان شما max رو 1 بذاريد بعد ببينيد بازم رو تست 1 wrong ميخوره يا نه ؟؟
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#16
این چندتا نکته رو همیشه رعایت کنید:
conio یا conio.h یا cconio در سند استاندارد ++ANSI C وجود ندارد. از آن به هیچ وجه استفاده نکنید
آخر برنامه هاتون getch یا cin.get یا چیزهای مشابه نذارین
از فایلهایی که به h. ختم می شوند استفاده نکنید. به جای stdio.h بنویسید cstdio و به جای iostream.h بنویسید iostream
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#17
Olympiad گفت
خوب معلومه كه چرا wrong ميشه ... چون كه بايد 20 تا صفر براي هر كدوم بذاره...الان شما max رو 1 بذاريد بعد ببينيد بازم رو تست 1 wrong ميخوره يا نه ؟؟
تو تستها این کار رو نمی کنن!
شما یک کمی کدتونو تغییر بدین<IMG src=modules/forums/images/smiles/53.gif></IMG src=modules/forums/images/smiles/53.gif>
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#18
آخه با آرايه نميشه نوشت!!!حتما بايد رشته باشه ... چون طول آرايه نميتونه متغير باشه.....من هم آخرش سر از اين رشته در نياوردم!!!!!!
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#19
گفته حداکثر تعداد ارقام 300 تاست<IMG src=modules/forums/images/smiles/4.gif></IMG src=modules/forums/images/smiles/4.gif>
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#20
خوب گفته باشه !!!! اگه بخوايم با آرايه بنويسيم ما بايد حتما 300 رقم وارد كنيم ديگه كه ....
 
بالا