c语言函数大数相加 c语言函数大数相加怎么表示

C语言大数相加,在线等,急效果c语言函数大数相加:
代码c语言函数大数相加:
#includestdio.h
#includestring.h
void reverse(char s[]) {
int len = strlen(s), h = len / 2;
char temp;
for (int i = 0; ih; ++i) {
temp = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = temp;
}
}
#define System 10
#define MAX 24
const char mx = '9';
const char mn = '0';
char* Sum(char s1[], char s2[]) {
char ans[MAX];
int len1 = strlen(s1), len2 = strlen(s2), ad = 0, min = len1len2 ? len1 : len2, max = len1len2 ? len1 : len2, i;
char* st1, *st2;
if (len1len2) { st1 = s2; st2 = s1; }
else { st1 = s1; st2 = s2; }
reverse(st1);
reverse(st2);
for (i = 0; imin; i++) {
ans[i] = st1[i] + st2[i] - '0' + ad;
if (ans[i]mx) {
ans[i] -= System;
ad = 1;
}
else ad = 0;
}
while (ad != 0 || i max) {
if (imax)ans[i] = st2[i] + ad;
else ans[i] = mn + ad;
if (ans[i]mx) {
ans[i] -= System;
ad = 1;
}
else ad = 0;
i++;
}
ans[i] = '\0';
reverse(ans);
return ans;
}
int main() {
char A[21], B[21], C[50], *ans;
int n, m;
scanf("%d %d", m, n);
scanf("%s %s", A, B);
【c语言函数大数相加 c语言函数大数相加怎么表示】 ans = Sum(A, B);
strcpy(C, ans);
printf("%s\n", C);
}
c语言 大数相加c/c++中int和unsigned类型变量 , 都不能保存超过10位的整数,但有时我们需要计算位数非常长的整数或小数的加法 。一般我们称这种基本数据类型无法表示的整数为大整数 。如何表示和存放大整数呢?基本的思想就是:用数组存放和表示大整数 。一个数组元素 , 存放大整数中的一位 。
现在假如我们要计算俩个200位数的加法 。显然 , 任何C/C++固有类型的变量都无法保存它 。最直观的想法是可以用一个字符串来保存它 。字符串本质上就是一个字符数组,因此为了编程更方便 , 我们也可以用数组int an[200]来保存一个200 位的整数,让an[0]存放个位数,an[1]存放十位数,an[2]存放百位数……那么如何实现两个大整数相加呢?方法很简单 , 就是模拟小学生列竖式做加法,从个位开始逐位相加,超过或达到10 则进位 。也就是说 , 用int an1[201]保存第一个数,用int an2[200]表示第二个数,然后逐位相加 , 相加的结果直接存放在an1 中 。要注意处理进位 。另外,an1 数组长度定为201,是因为两个200 位整数相加,结果可能会有201 位 。实际编程时,不一定要费心思去把数组大小定得正好合适,稍微开大点也无所谓,以免不小心没有算准这个“正好合适”的数值,而导致数组小了 , 产生越界错误 。
下面是具体程序:
#includestdio.h
#includestring.h
#defineMAX_LEN 200
int an1[MAX_LEN+10];
int an2[MAX_LEN+10];
charszLine1[MAX_LEN+10];
charszLine2[MAX_LEN+10];
int main(void)
{
scanf("%s", szLine1);
scanf("%s", szLine2);
inti, j;
memset( an1, 0, sizeof(an1));
memset( an2, 0, sizeof(an2));
int nLen1 = strlen( szLine1);
for( j = 0, i = nLen1 - 1;i = 0 ; i--)
an1[j++] = szLine1[i]- '0';
int nLen2 = strlen(szLine2);
for( j = 0, i = nLen2 - 1;i = 0 ; i--)
an2[j++] = szLine2[i]- '0';
for( i = 0;iMAX_LEN ; i++ )
{ an1[i]+= an2[i];//逐位相加
if( an1[i] = 10 )
{ //看是否要进位
an1[i] -= 10;
an1[i+1] ++; //进位
}
}
for( i = MAX_LEN; (i= 0)(an1[i] == 0); i-- ) ;
if(i=0)
for( ; i = 0; i--)