解题思路:

注意事项:

参考代码:

//高精度数字相加

#include

#include

char n[1001], m[1001];

int a[1001], b[1001], c[1001];


int main()

{

while (~scanf("%s%s", n, m)) {

//反向存入int型

//n存入a   m存入b

int ln = strlen(n);

int lm = strlen(m);

for (int i = 0; i < ln; i++)

{

a[ln - 1 - i] = n[i] - '0';

}

for (int i = 0; i < lm; i++)

{

b[lm - 1 - i] = m[i] - '0';

}

//以上完成反向存储

//接下来就是相加

int x = ln > lm ? ln : lm;//采取哪个数的位数大

// 以作为循环次数

for (int i = 0; i < x; i++)

{

c[i] += a[i] + b[i];

if (c[i] >= 10)

{

c[i + 1] = c[i] / 10;

c[i] %= 10;

}

}

while (c[x] == 0 && x > 0)

x--;     //除去前导0 


for (int i = x; i >= 0; --i)

printf("%d", c[i]);

memset(a, 0, sizeof(a));//清空数组

memset(b, 0, sizeof(b));

memset(c, 0, sizeof(c));


putchar('\n');

}

return 0;

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

h2430819042 1月前 回复TA
为什么要清空数组呢
Adawz 1年前 回复TA
改了
Adawz 1年前 回复TA
scanf("%s%s", &n, &m)这里不需要地址符  因为数组名  本身就是地址