1、memset(void *s,int ch,size_t n),数组初始化;
2、an1+an2,结果存放到an1中,节省空间,好操作;
3、字符和数字之间的转换,先输入到字符数组中,再转换到int数组中,char-‘0’=int,即‘8'-‘0’=8;
4、输出显示时,设计一个bool变量,去掉整个数组中第一个数字出现的多余的0;
5、不能忘记特殊情况:0+0时的特殊处理,当bool变量在第4点的处理过程中还是原值时,就输出0;
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 200
int main()
{
int an1[MaxSize+10];
int an2[MaxSize+10];
char input1[MaxSize+10];
char input2[MaxSize+10];
int i,j;
//先输入两个加数的值,然后存放在字符串数组中
scanf("%s %s",input1,input2);
//printf("%s %s",input1,input2);
//用memset对an1和an2数组初始化
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
// for(i=0;i<strlen(input1);i++)
// printf("%d %d",an1[i],an1[i]);
//将输入到input1,input2字符数组中的字符转换为数字形式
int nLen1=strlen(input1);
for(i=nLen1-1,j=0;i>=0;i--,j++)
{
an1[j]=input1[i]-'0';
}
int nLen2=strlen(input2);
for(i=nLen2-1,j=0;i>=0;i--,j++)
{
an2[j]=input2[i]-'0';
}
//for(i=0;i<strlen(input1);i++)
// printf("%d %d",an1[i],an2[i]);
//开始计算,将结果保存到an1中,注意进位
int temp=0;
for(i=0;i<MaxSize;i++)
{
temp=an1[i]+an2[i];
if(temp/10==0)
{
an1[i]=temp;
}else{
an1[i]=temp%10;
an1[i+1]+=1;
}
}
//输出,跳过开始为0的值,从an1 下标由大到小输出
int startoutput=0;//加入这个bool变量是为了当发现第一个非0数后一会就不用判断是否为0了,直接输出剩余的数组值
for(i=MaxSize;i>=0;i--)
{
if(startoutput)
printf("%d",an1[i]);
else if(an1[i])
{
printf("%d",an1[i]);
startoutput=1;
}
}
//之前提交一直wrong answer,看了大家做的,才知道自己忽略了0+0的情况
if(startoutput==0)//or if(!startoutput)
printf("0");
return 0;
}
实验结果: