天天看点

c语言实现两个超长正整数加法,二个超长正整数的相加

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

看看这个,定义数组的长度为251,可以实现最长250位的两个整数相加.

#include

#include

main()

{int i;

char str1[251]={0};

char str2[251]={0};

char str_rut[252]={0};

int len_str1,len_str2,len_rut=0;

int flag=0; 

clrscr();

printf("please input the first value:\n");

scanf("%s",str1);

printf("please input the second value:\n");

scanf("%s",str2); 

len_str1=strlen(str1)-1;

len_str2=strlen(str2)-1;

while(len_str1>=0&&len_str2>=0)

{ *(str_rut+len_rut)=*(str1+len_str1)+*(str2+len_str2)+flag-48;

len_rut++;

flag=0;

if(*(str_rut+len_rut-1)>=58)

{ *(str_rut+len_rut-1)-=10;

flag=1;

}

len_str1--;

len_str2--;

}

while(len_str1>=0)

{

*(str_rut+len_rut)=*(str1+len_str1)+flag;

len_rut++;

flag=0;

if(*(str_rut+len_rut-1)>=58)

{ *(str_rut+len_rut-1)-=10;

flag=1;

}

len_str1--;

}

while(len_str2>=0)

{

*(str_rut+len_rut)=*(str2+len_str2)+flag;

len_rut++;

flag=0;

if(*(str_rut+len_rut-1)>=58)

{ *(str_rut+len_rut-1)-=10;

flag=1;

}

len_str2--;

}

if(flag==1)

*(str_rut+len_rut)=49;

len_str1=strlen(str1);

len_str2=strlen(str2);

len_str1=strlen(str1);

len_str2=strlen(str2);

strrev(str_rut);

printf("\n");

if(len_str1>len_str2)

{

printf(" %s\n",str1);

printf("+ ");

for(i=1;i<=len_str1-len_str2;i++)

printf(" ");

printf("%s\n",str2);

printf("--");

for(i=1;i<=len_str1;i++)

printf("-");

printf("\n=");

if(flag==0) printf(" ");

printf("%s\n",str_rut);

}

else if(len_str1

{ printf(" ");

for(i=1;i<=len_str2-len_str1;i++)

printf(" ");

printf("%s\n",str1);

printf("+ %s\n",str2);

printf("--");

for(i=1;i<=len_str2;i++)

printf("-");

printf("\n=");

if(flag==0) printf(" ");

printf("%s\n",str_rut);

}

else

{ printf(" %s\n",str1);

printf("+ %s\n",str2);

printf("--");

for(i=1;i<=len_str1;i++) printf("-");

printf("\n=");

if(flag==0) printf(" ");

printf("%s\n",str_rut);

}

system("pause");

}