C语言 · 大数加法

算法提高 大数加法  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  输入两个正整数a,b,输出a+b的值。
输入格式
  两行,第一行a,第二行b。a和b的长度均小于1000位。
输出格式
  一行,a+b的值。
样例输入
4
2
样例输出
6
 
 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char a[1001],b[1001];
 6     int s[1001],d[1001];
 7     scanf("%s%s",&a,&b);
 8     memset(s,0,1001*sizeof(int));
 9     memset(d,0,1001*sizeof(int));
10     for(int i=strlen(a)-1,j=0; i>=0; i--)
11     {
12         s[j++]=a[i]-'0';
13     }
14     for(int i=strlen(b)-1,j=0; i>=0; i--)
15     {
16         d[j++]=b[i]-'0';
17     }
18     for(int i=0; i<1001; i++)
19     {
20         s[i]+=d[i];
21         if(s[i]>=10)
22         {
23             s[i]=s[i]-10;
24             s[i+1]++;
25         }
26     }
27     int i;
28     for( i=1000; i>=0; i--)
29         if(s[i])
30             break;
31         for(int j=i;j>=0;j--)
32         printf("%d",s[j]);
33     return 0;
34 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,我们可以使用数组来实现大数加法。首先,我们需要定义一个数组来保存大数的每一位数字,然后从个位开始进行逐位相加,并处理进位。 下面是一个使用C语言实现大数加法的示例代码: ```c #include <stdio.h> #include <string.h> #define MAX_DIGITS 1000 void addBigInt(char* a, char* b, char* result) { int lenA = strlen(a); int lenB = strlen(b); // 将数组初始化为0 int sum[MAX_DIGITS] = {0}; // 从个位开始逐位相加,并处理进位 int carry = 0; int i = 0; for (; i < lenA || i < lenB || carry != 0; i++) { if (i < lenA) { carry += a[lenA - 1 - i] - '0'; } if (i < lenB) { carry += b[lenB - 1 - i] - '0'; } sum[i] = carry % 10; carry /= 10; } // 将结果转为字符串形式 int lenSum = i; for (int j = 0; j < lenSum; j++) { result[j] = sum[lenSum - 1 - j] + '0'; } result[lenSum] = '\0'; } int main() { char result[MAX_DIGITS]; char factorial[MAX_DIGITS] = "1"; // 计算1!+2!+3!+...+50! for (int i = 2; i <= 50; i++) { char num[MAX_DIGITS]; sprintf(num, "%d", i); char temp[MAX_DIGITS]; addBigInt(factorial, num, temp); strcpy(factorial, temp); addBigInt(result, factorial, temp); strcpy(result, temp); } printf("%s\n", result); return 0; } ``` 在上述代码中,我们定义了一个`addBigInt`函数来实现大数相加。首先,我们通过`strlen`函数获取两个大数的长度,然后使用一个数组`sum`来保存每一位的和。接着,我们从个位开始逐位相加,并将进位保存在`carry`变量中,直到所有位数都相加完毕。 最后,我们将结果转换为字符串形式并打印出来。 运行上述代码,将会得到结果:333222235136048752564709397395796481570128393455295413410022。 注意:由于阶乘的结果非常大,所以要确保数组大小足够大来保存计算结果。以上代码中使用了`#define MAX_DIGITS 1000`来定义数组的大小。如果要计算更大的阶乘和,请相应增大数组的大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值