大数乘法:
?
?
数值
?
#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?
- ?
- ?
- ?
- ?
- ??
- 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);??
- ????b?=?(char?*)malloc(max_len?+?1);??
- ??
- ????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]?=?' ';??
- ????free(a);??
- ????free(b);??
- }?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|