您的位置:首页 > 编程语言 > C语言/C++

C语言实现两个超大数组相加

2018-03-29 00:19 477 查看
//任意两个一百位以上的整数相加;
//用字符串存储,数组输入相加后的和并输出;
//由于不知道相加后的结果,而且数组没办法提前知道所得结果的长度,所以需要将数组设置的尽量大;
#include<stdio.h>
#include<string.h>
#define N 200     //设定存储相加之和的数组大小;
int main(void)
{
char s1[100],s2[100],*s=s1;    //注意这里的指针s指向字符数组s1上;
int R
,cp=0;
//输入两个字符串;
printf("输入第一个字符串:");
gets(s1);
printf("输入第二个字符串:");
gets(s2);
//初始化,因为数学运算相加需要从各位开始,所以刚开始两个数组的数字要从最后一位开始;
int i=strlen(s1)-1;
int j=strlen(s2)-1;
int k=N-1;    //相加后的结果也要从 最后一位开始存储到数组中;
//计算;
while(i>-1&&j>-1)  //两个字符串都没有完;
{

//因为字符型数字的转换成整型需要减去这个字符型数字的ASCII码;

//cp表示进位的数字,刚开始cp=0;

int x=s1[i--]-'0'+s2[j--]-'0'+cp;
R[k--]=x%10;
cp=x/10;
}
if(j>-1)   //如果s2没完,将本来指向s的指针指向s2;
{
i=j;
s=s2;
}
while(i>-1)  //由上个if判断s1和s2那个没完,将剩下的数字按照位输入到整形数组R中;

{
int x=s[i--]-'0'+cp;    //此时的cp表示上面的循环中可能还有进位,所以这里的cp不需要清空;
R[k--]=x%10;
cp=x/10;
}
if(cp)  //*重要*   判断最高位是否需要进位;
R[k--]=cp;
//输出;
printf("\n两个字符串相加后的存储结果为:\n");
for(i=k+1;i<N;i++)
printf("%d",R[i]);
printf("\n");
return 0;
}

//结果: 举例:   s1     123456789
                           s2      987654321



//不懂的可以留言,希望能帮到你,看到留言我会回复;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: