69,373
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n1,n2,h[1000];
int main()
{
void sum(int *a,int *b,int k1,int k2);//相加函数。
char *a,*b;
a=(char *)malloc(100);
b=(char *)malloc(100);
scanf("%s%s",a,b);//以字符串形式输入。
n1=strlen(a); //得出位数。
n2=strlen(b);
int *p1=(int *)a; //转化为整形。
int *p2=(int *)b;
int c[n1],d[n2],n;
for(n=0;n<n1;n++)//分别赋值到两个数组。
{
c[n]=*(p1+n);
}
for(n=0;n<n2;n++)
{
d[n]=*(p2+n);
}
sum(c,d,n1,n2);
for(n=0;n<1000;n++)//输出相加结果。
{
if((h[n])=='\0') continue;
printf("%d",h[n]);
}
return 0;
}
void sum(int *a,int *b,int k1,int k2)
{
int m1,m2,c,n=999;
for(m1=k1-1,m2=k2-1;(m1>=0)&&(m2>=0);m1--,m2--,n--)//从个为开始加,当有其中一个数位数加尽了停止循环。
{
if(c=(*(a+m1)+*(b+m2)+h[n])>9)//当两个相同位和h数组(即可能上一位进了一)相加大于9时。
{
h[n]=c-10;//和为相加和减去10加上本身的值.
h[n-1]++;
}
else h[n]=(*(a+m1)+*(b+m2))+h[n];//如没有大于9则不用减10.
while((m1<0)&&(m2>=0))//即当a数组位数小时。
{
h[n--]=b[m2--];
}
while(m2<0&&m1>=0)
{
h[n--]=b[m1--];
}
}
}
int *p1=(int *)a; //转化为整形。
int *p2=(int *)b;