这个题,需要注意数值的范围,显然需要另辟奇径来算,就用数组来算。
需要注意数组元素值超过9,需要进位的问题,还要考虑第一位是不是需要进位的问题。
#include<stdio.h>
#include<string.h>
int main()
{
char a1[100],a2[100],a3[101];
int a,b,c,d,e;
gets(a1); /*输入第一个数*/
gets(a2); /*输入第二个数*/
b=strlen(a1);
c=strlen(a2);
a3[0]='0'; /*考虑到第一位的进位问题,给第一个元素赋值为0*/
if(b>c) /*把长的数组前面多出来的位数赋值给a3数组,这样就可以直接加*/
for(a=1;a<=b-c;a++)
a3[a]=a1[a-1];
else
for(a=1;a<=c-b;a++)
a3[a]=a2[a-1];
d=b>c?b:c;
e=b<c?b:c; /*使d为b,c最大值,e为b,c最小值,用于后面的大小加减判断*/
for(a=d-e+1;a<=d+1;a++) /*从长的比短的多的位数开始把两个数组相加付给a3数组*/
{
if(b<c)
a3[a]=a1[a-d+e-1]+a2[a-1]-48;
else
a3[a]=a2[a-d+e-1]+a1[a-1]-48;
}
for(a=d+1;a>0;a--) /*判断a3数组的元素大于还是小于9,大于然后考虑上一元素的进位,还要考虑上一位元素的进位在影响前一位元素的进位,所以从最后一个元素循环判断*/
if(a3[a]>57)
{
a3[a-1]=a3[a-1]+1;
a3[a]=a3[a]-10;
}
for(a=0;a<=d+1;a++) /*循环输出a3数组,当第一个元素是0,不输出第一个元素.*/
{
if(a==0)
if(a3[a]=='0')
continue;
printf("%c",a3[a]);
}
getchar();
getchar();
return 0;
}
这个就是代码,最主要问题就是进位进位再进位。这个会了,这个题就解决一半了