大数相加(C语言)
算法思路:
- 初始化结果数组,输入数据并存储至字符数组
- 判断将较大者存放至数组1
- 数组逆序,便于求解进位
- 当相同位数相加大于9时,进位1,当前位取余
- 否则相加结果就是当前位
- 结果逆序并输出
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
void reverse(char* arr, int len)//数组逆序
{
for (int i = 0; i < len / 2; i++)
{
char c = arr[i];
arr[i] = arr[len - 1 - i];
arr[len - 1 - i] = c;
}
}
int main(void)
{
//大数相加:正着输,逆着求
//char num1[N] = "2", num2[N] = "9998", result[N] = "";
char num1[N], num2[N], result[N] = {'0' };
//输入并存储
printf("请输入两个大数:\n");
gets(num1);
gets(num2);
//比较的较大者num1
if (strlen(num1) < strlen(num2))
{
char temp[N] = "";
strcpy(temp, num1);
strcpy(num1, num2);
strcpy(num2, temp);
}
int len1 = strlen(num1);
int len2 = strlen(num2);
//逆序处理
reverse(num1, len1);
reverse(num2, len2);
//puts(num1);
//puts(num2);
//相加 99999+1
int i;
for (i = 0; i < len2; i++)
{
int n = num1[i] + num2[i] - 2 * 48;//'0'=48
if (n > 9)
{
result[i] = n % 10 + 48;
result[i + 1] = 1 + 48;
}
else
result[i] = n + 48;
}
for (; i < len1; i++)//大者剩余加入结果
{
int n = num1[i] + result[i] - 2 * 48;
if (n > 9)
{
result[i] = n % 10 + 48;
result[i + 1] = 1 + 48;
}
else
result[i] = n + 48;
}
//puts(result);
//输出
reverse(result, strlen(result));
puts(result);
system("pause");
return 0;
}