问题描述:
求两个不超过200位的非负整数的和。
问题分析:
用一个字符串来保存大整数。将输入的数据直接存放到字符串中。
参考代码:
#include<stdio.h>
#include<string.h>
#define max 210
void Invert(char*a,int*b);
int main()
{
char str1[max],str2[max],str[max];//存放两个加数以及和的字符串组
int a[max],b[max],c[max];//存放两个加数以及和的整形数组
printf("请输入两个加数:");
scanf("%s %s",str1,str2);
//将数组a,b,c中所有的元素清零
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
//将两个加数字符串按位逆置到整形数组中,下标0对应个位
Invert(str1,a);
Invert(str2,b);
int len=strlen(str1)>=strlen(str2) ? strlen(str1):strlen(str2);//求加数位数更长的
for (int i=0;i<len;i++)
{
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]=c[i]%10;
}
//和的处理,去掉前导0,并把结果复制到串中。和的长度可能为len+1,所以从下标len开始扫描是否为0
while(len>=0 && c[len]==0) len--;
memset(str,0,sizeof(str));
int i=0;
for(int j=len;j>=0;j--)
{
str[i++]=c[j]+'0';
}
if(strlen(str)==0) str[0]='0';//结果为零的情况
printf("%s+%s=%s",str1,str2,str);
return 0;
}
void Invert(char*a,int *b)
{
int len=strlen(a),j=0;
for(int i=len-1;i>=0;i--)
b[j++]=a[i]-'0';
}
运行截图