1)先从键盘屏幕接收两个大数,按字符串存放到字符数组中。
2)
初始化进位为0
然后从两个字符数组中分别取出最后一个字符(数字)开始来求和
一直求和到字符串长度较小的最小下标处停止
结果保存较大数字所存放的字符数组中
(说明:
如果结果大于106,那么结果减去58存入,并记录进位为1
否则,结果减去48存入,并记录进位为0
)
3)如果两个数字的位数不相同,那么需要求出最后一位可能的进位
比如5+96=101
4)进位为1,那么和之前需要输出一个1
5)输出两个大数的和
下面是具体代码
//大数求和(这里可以通过调整Num_Len的来限制数的最大位数)
#include
#include
#define Num_Len 10000
int main()
{
char LN[2][Num_Len];
long MinLen,i,LN_Len[2];
int jw=0,flag,flag1,equal,Temp; //进位:jw 下标:长度更小的那个数的下标flag
printf("Please input two Large Number less than %ld bit\n",Num_Len);
scanf("%s%s",&LN[0],&LN[1]);
LN_Len[0]=strlen(LN[0]);
LN_Len[1]=strlen(LN[1]);
equal=LN_Len[0]==LN_Len[1]?1:0;
flag=LN_Len[0]
flag1=1-flag;
LN_Len[flag1]=LN_Len[flag1]-MinLen-1;
for(i=MinLen;i>=0;i--)
{
Temp=LN[flag1][LN_Len[flag1]+i]+LN[flag]<i>+jw;
if(Temp>=106)
{
jw=1;
LN[flag1][LN_Len[flag1]+i]=Temp-58;
}
else
{
jw=0;
LN[flag1][LN_Len[flag1]+i]=Temp-48;
}
}
if(equal==0)
{
Temp=LN[flag1][LN_Len[flag1]+i]+jw;
if(Temp>=58)
{
jw=1;
LN[flag1][LN_Len[flag1]+i]=Temp-10;
}
else
{
jw=0;
LN[flag1][LN_Len[flag1]+i]=Temp;
}
}
printf("两数之和为:\n");
if(jw==1) printf("%d",jw);
printf("%s\n",LN[flag1]);
return -1;
}
补充:在ubuntu下用gcc编译通过
部分演示结果
falcon@falcon:~/program/c/code/mylove$ gcc -o add_LN add_LN.c
falcon@falcon:~/program/c/code/mylove$ ./add_LN
Please input two Large Number less than 10000 bit
5
6
两数之和为:
11
falcon@falcon:~/program/c/code/mylove$ ./add_LN
Please input two Large Number less than 10000 bit
877848515165484151
996527784841515184
两数之和为:
1874376300006999335
falcon@falcon:~/program/c/code/mylove$ ./add_LN
Please input two Large Number less than 10000 bit
8995951
784784987951252178485215254798749874984185416845865215187484520512
两数之和为:
784784987951252178485215254798749874984185416845865215187493516463
falcon@falcon:~/program/c/code/mylove$ ./add_LN
Please input two Large Number less than 10000 bit
5
96
两数之和为:
101
0 件のコメント:
コメントを投稿