//任意两个一百位以上的整数相加;
//用字符串存储,数组输入相加后的和并输出;
//由于不知道相加后的结果,而且数组没办法提前知道所得结果的长度,所以需要将数组设置的尽量大;
#include<stdio.h>
#include<string.h>
#define N 200 //设定存储相加之和的数组大小;
int main(void)
{
char s1[100],s2[100],*s=s1; //注意这里的指针s指向字符数组s1上;
int R[N],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
//不懂的可以留言,希望能帮到你,看到留言我会回复;