Bignum--updated

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#21
یعنی با string مشکل داری؟
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#23
خب. اگه با string مشکل دارید می تونید راهنمای STL رو بخونید. string در حقیقت یک vector از کاراکترهاست

http://www.sgi.com/tech/stl/
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#24
فعلا دارم به يه نتايجي مي رسم !!!!!!‌
ضمنا نگفتيد كه vector چيه !!!!؟؟؟؟
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
#25
آقای گوهر شادی می شه اینو امتحان کنید:

اگه اینم درست نیست دیگه...


کد
#include <stdio.h>
int main()
{
    char s1[300],s2[300];
    int ragham1[300],ragham2[300],sum[500],k1=0,k2=0,j=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)
{
	    for(int i=k1;i>=k2-1;i--)
	    {
			  if(k2>=j)
			  {ragham2[i]=ragham2[k2-j]; j++;}
	    }
	    
for(int i=1;i<=(k1-k2);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 && 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(k2>k1)
{
	    for(int i=k2;i>=k1-1;i--)
	    {
			  if(k1>=j)
			  {ragham1[i]=ragham1[k1-j]; j++;}
	    }
	    
for(int i=1;i<=(k2-k1);i++)
{
	   ragham1[i]=0;
}

for(int i=k2;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<=k2;i++)
{
	 printf("%d",sum[i]);
} 
	   
} 
				
    return 0;
}
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#26
کد
[COLOR=#000000][FONT=Times New Roman][SIZE=3][COLOR=#ffffff][FONT=Tahoma,Arial]Compiling ...
/var/www/inoi/web/uploads/assets/subs/3616/prog.cpp:126:3: warning: no newline at end of file
=================
Test #00:
 
OK!
Test #01:
 
OK!
Test #02:
 
WRONG!
Judge Finished......[/FONT][/COLOR][/SIZE][/FONT][/COLOR]
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#27
Olympiad گفت
فعلا دارم به يه نتايجي مي رسم !!!!!!‌
ضمنا نگفتيد كه vector چيه !!!!؟؟؟؟
تو همون راهنمای stl همه ی اینها رو کاملا توضیح داده
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
#28
آقای گوهر شادی من اینو قبلا به آقای جلال منش هم گفتم ولی از جوابشون چیز زیادی دسگیرم نشد!

می شه یه برنامه نوشت که به دو تا برنامه تست های مختلف رو بده و هر وقت جواباشون فرق داشت اون تست رو تو خروجی چاپ کنه!؟
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#29
تو ویندوز نمی دونم ولی تو linux به راحتی می شه باbash چنین برنامه ای نوشت.
ضمنا قرار بود اینجا راجع به bignum بنویسیم. بهتر نیست یک کمی تاپیک جدید باز کنید؟
 

Olympiad

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

براي اعدادي كه تعداد ارقام برابر دارند كار مي كنه اما موقعي كه برابر نباشند .....

اگه ميشه اشكالش رو بگيد .........


کد
#include <conio.h>
#include <iostream>
#include <math.h>
using namespace std;
 int main()
   {
	 const int max=100;
	 char a[max],b[max],c[max];
	 gets(a);
	 gets(b);
	 for(int i=0;i<strlen(a);i++)
	  a[i]-=48;
	 for(int j=0;j<strlen(b);j++)
	  b[j]-=48;
	 if(strlen(a)==strlen(b))
	   {
	    for(int u=0;u<strlen(a);u++)
		c[u]=a[u]+b[u];
		for(int m=strlen(a)-1;m>0;m--)
		  {
		    if(c[m]>=10)
			 {
			   int carry=c[m]/10;
			   c[m]%=10;
			   c[m-1]+=carry;
			 }
		  }
		for(int n=0;n<strlen(a);n++)
		  printf("%d",c[n]);
		getch();
		return 0;
	   }
	else if(strlen(a)>strlen(b))
	  {
	    for(int i=strlen(a)-strlen(b);i<strlen(a);i++)
		c[i]=a[max-strlen(b)+i]+b[i];
	    for(int i=0;i<strlen(a)-strlen(b);i++)
	    c[i]=a[i];
	    for(int m=strlen(a)-1;m>0;m--)
		  {
		    if(c[m]>=10)
			 {
			   int carry=c[m]/10;
			   c[m]%=10;
			   c[m-1]+=carry;
			 }
		  }	  
		for(int y=0;y<strlen(a);y++)
		 printf("%d",c[y]);
	  getch();
	 return 0;
	   }	
   }
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#31
خب به نظر من خیلی راحت می شه به این کد یه تیکه هایی اضافه کرد که وقتی تعداد ارقام برابر نیستند به اندازه ی کافی صفر در ابتدای کوچکتره بذاره
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#33

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#34
من اعصابم خورد شد!!!!!!!!!!

الان اين مشكلش چيه !!!!!!!؟؟؟؟؟؟؟؟؟

کد
#include <conio.h>
#include <iostream>
#include <math.h>
using namespace std;
 int main()
   {
	 const int max=100;
	 char a[max],b[max],c[max];
	 gets(a);
	 gets(b);
	 for(int i=0;i<strlen(a);i++)
	  a[i]-=48;
	 for(int j=0;j<strlen(b);j++)
	  b[j]-=48;
	 if(strlen(a)==strlen(b))
	   {
	    for(int u=0;u<strlen(a);u++)
		c[u]=a[u]+b[u];
		for(int m=strlen(a)-1;m>0;m--)
		  {
		    if(c[m]>=10)
			 {
			   int carry=c[m]/10;
			   c[m]%=10;
			   c[m-1]+=carry;
			 }
		  }
		for(int n=0;n<strlen(a);n++)
		  printf("%d",c[n]);
		getch();
		return 0;
	   }
	else if(strlen(a)>strlen(b))
	  {
	    char bb[max];
	    for(int i=0;i<strlen(a)-strlen(b);i++)
		 {
		   bb[i]='0';
		   bb[i]-=48;
		 }
	    strcat(bb,b);
	    for(int i=0;i<strlen(a);i++)
		c[i]=a[i]+bb[i];
	    for(int m=strlen(a)-1;m>0;m--)
		  {
		    if(c[m]>=10)
			 {
			   int carry=c[m]/10;
			   c[m]%=10;
			   c[m-1]+=carry;
			 }
		  }	 
		for(int y=0;y<strlen(a);y++)
		 printf("%d",c[y]);
	  getch();
	 return 0;
	   }	
   }
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
#35
اين كد چه ايرادي داره ؟؟؟؟؟؟؟؟؟؟؟
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#36

Olympiad

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

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#38
من هم که کامپایلر نیستم هر کدی رو بفهمم! من خیلی سعی کنم می تونم کدهای خودمو بفهمم
 

Olympiad

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

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
#40
کامنت بنویسید تا بتونم کمک کنم.
 
بالا