C语言也有大学问——大数相加问题
发布时间:2020-12-14 03:11:43 所属栏目:大数据 来源:网络整理
导读:两个大数相加,超过了数据类型能表示的范围时,怎么办? 首先想到的是字符串,因为字符串只要内存够,就可以存放,这个时候我们就要借助字符串的一些操作来实现大数相加的问题。 具体代码如下: #include stdio.h #include string.h void main(){char s1[200
两个大数相加,超过了数据类型能表示的范围时,怎么办? 首先想到的是字符串,因为字符串只要内存够,就可以存放,这个时候我们就要借助字符串的一些操作来实现大数相加的问题。 具体代码如下:
#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("0n"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |