您的位置:首页 > 编程语言 > C语言/C++

C语言也有大学问——大数相加问题

2017-05-17 10:57 375 查看
两个大数相加,超过了数据类型能表示的范围时,怎么办?

首先想到的是字符串,因为字符串只要内存够,就可以存放,这个时候我们就要借助字符串的一些操作来实现大数相加的问题。

具体代码如下:

#include <stdio.h>
#include <string.h>

void main()
{
char s1[200], s2[200];
int num1[200] = { 0 }, num2[200] = { 0 }, len1, len2, i, j,lenMax=0;      //数组清零
gets(s1);  gets(s2);           //输入两个大数装入字符数组
len1 = strlen(s1);  len2 = strlen(s2); //获得大数的长度
lenMax = len1 > len2 ? len1 : len2;
for (i = len1 - 1, j = 0; i >= 0; i--)
num1[j++] = s1[i] - '0';
for (i = len2 - 1, j = 0; i >= 0; i--)
num2[j++] = s2[i] - '0';   //将字符数组的值转为整形数值并装入数组
for (i = 0; i < lenMax; i++)
{
num1[i] += num2[i];

if (num1[i] > 9)
{
num1[i] = num1[i] - 10;
num1[i + 1]++;
}
}   //两个数组按位相加
for (i = lenMax; (i >= 0) && (num1[i] == 0); i--);           //从高位找出第一个不是零的数
if (i >= 0)
for (; i >= 0; i--)
printf("%d", num1[i]);             //输出数组
else     printf("0\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: