大数乘法:
#include <stdio.h>
#include <string.h>
int main()
{
char a[100],b[100];
int la,lb,n;
int i,j;
while(scanf("%s%s",&a,&b) != EOF) {
int c[200] = {0};
la = strlen(a);
lb = strlen(b);
n = la + lb - 1;//相乘之后的位数,最后可能因为进位再加上一位
for(i = 0; i < n; i++) {
for(j = 0; j <= i && j <= la - 1 ; j++)//需要累加如A0A1A2 * B0B1 = B0*A0 + (B1*A0 + B0* A1) + (B1*A1 + B0*A2) + B1*A2
{
if (i - j > lb - 1) continue;
c[i + 1] += (a[j] - '0') * (b[i - j] - '0');
}
}
for (i = n ; i > 0; i--) { //处理进位
c[i - 1] += c[i] / 10;
c[i] = c[i] % 10;
}
for (i = 0; c[i] == 0 && i <= la + lb - 1 ; i++);//排除第零位可能没有进位的情况
for(; i <= n; i++)
{
printf("%d",c[i]);
}
printf("\n");
}
return 0;
}
大数加法:
-
#define MAX 110
- /*******************************
- *大整数的加法
- *参数:s1,s2为两个以字符串存储的加数
- *返回值:无
- *******************************/
- char result[MAX];
- void big_num_add(char * s1,char * s2)
- {
- int max_len,len1,len2;
- int i,k;
- char * a;
- char * b;
- len1 = strlen(s1);
- len2 = strlen(s2);
- max_len = len1 > len2?len1 : len2;
- a = (char *)malloc(max_len + 1);//暂存s1
- b = (char *)malloc(max_len + 1);//暂存s2
- memset(a,max_len + 1);
- memset(b,max_len + 1);
- k = 0;
- for(i = len1 - 1;i >= 0;i--) a[k++] = s1[i] - '0';//倒置存放
- k = 0;
- for(i = len2 - 1;i >= 0;i--) b[k++] = s2[i] - '0';//倒置存放
- for(i = 0;i < max_len;i++)
- {
- a[i] += b[i];
- if(a[i] > 9)
- {
- a[i] = a[i] - 10;
- a[i + 1]++;
- }
- }
- if(a[max_len] != 0) max_len++;
- k = 0;
- for(i = max_len - 1;i >= 0;i--) result[k++] = a[i] + '0';
- result[k] = '\0';
- free(a);
- free(b);
- }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。