[c]代码库
/**************************************
大数相乘算法
算法复杂度为:O(longhta*longthb)
longtha为乘数的位数
longhtb为被乘数的位数
***************************************/
#include <stdio.h>415
#include <string.h>
#include <conio.h>
#define LEN 1000
void mult(char [], char [], char []);
main()
{
char op1[LEN], op2[LEN], op3[LEN * 2 - 1];
scanf("%s%s", op1, op2);
mult(op1, op2, op3);
printf("%s\n", op3);
getch();
return 0;
}
void reverse(char a[])
{
int longth = strlen(a);
int i;
for(i = 0; i < longth / 2; i++)
{
char t;
t = a[i];
a[i] = a[longth - i - 1];
a[longth - i - 1] = t;
}
}
void mult(char op1[LEN], char op2[LEN], char ans[LEN * 2 - 1])
{
char top1[LEN];
char top2[LEN];
strcpy(top1, op1);
strcpy(top2, op2);
reverse(top1);
reverse(top2);
int k;
int top1s = strlen(top1);
int top2s = strlen(top2);
for(k = 0; k < top1s + top2s; k++)
{
ans[k] = '0';
}
int i, j;
int jw, ys;
int longth;
for(j = 0; j < top2s; j++)
{
jw = 0;
for(i = 0; i < top1s; i++)
{
ys = ((top1[i] - '0') * (top2[j] - '0') + jw + ans[i + j] - '0') % 10;
jw = ((top1[i] - '0') * (top2[j] - '0') + jw + ans[i + j] - '0') / 10;
ans[i + j] = ys + '0';
}
if(jw > 0)
{
ans[i + j] = jw + '0';
}
}
longth = i + j - 1;
if(jw > 0)
ans[longth++] = jw + '0';
ans[longth] = '\0';
reverse(ans);
}
[代码运行效果截图]
by: 发表于:2017-08-14 11:28:45 顶(0) | 踩(0) 回复
??
回复评论