一、高精度加法
思路:
前提:非负整数
1、将字符串数组倒序存储到整型数组中(倒序存储和正序存储皆可)
void change(char *str, int *sub);str是将要转换的字符数组,sub是转换为数字的整型数组
2、开始加法运算
情况一、两数相加后位数不变
假设输入字符串a为"28", 字符串b为"34",倒序存储后整数数组为:
a转为82 (存储在m数组)
b转为43 (存储在n 数组)
相同的位数进行相加,若和大于等于10,保留和的个位数,然后进1
8+4 = 12 > 10, 保留个位数2,然后进1(这里的进1:给整数82的数字2加1,即2变成3)
3+3 = 6 < 10, 保留个位数6,不需要进1;
s所以结果为26,由于之前是倒序相加,所以最终结果还需要倒序输出,所以为62,位数不增加
情况二、两数相加后位数增加
假设输入字符串a为"87", 字符串b为"34",倒序存储后整数数组为:
a转为78 (存储在m数组)
b转为43 (存储在n 数组)
7 + 4 = 11 > 10,保留个位数1,然后进1
9 + 3 = 12 > 10,保留个位数2,然后进1,关键就在这个地方,当最后一个相同位数相加时,如果大于等于10,这时候位数会加1。
3、倒序输出
代码如下
/*大整数的高精度加法*/
#include<stdio.h>
#include<string.h>
#define MAX 1000
void change(char *str, int *sub) {
int len = strlen(str)