分数连乘算法c语言:大整数乘法算法
分数连乘算法c语言:大整数乘法算法***********************************/ 局部变量运算前要进行初始化,避免影响计算结果 提示: gets函数在某些编译器里已经被丢弃使用 可以用get_s等类似函数
/**********************************
C/C 语言基础
超大超长整数相乘精确运算算法
函数功能:支持5000位数乘于5000位数
提示:
gets函数在某些编译器里已经被丢弃使用
可以用get_s等类似函数
局部变量运算前要进行初始化,避免影响计算结果
***********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a1[5000];
int a2[5000];
int res[10000];
int *p = &res[0];
char s1[5001] = { NULL };
char s2[5001] = { NULL };
int s1len;
int s2len;
printf("填入被乘数:\n");
gets(s1);
s1len = strlen(s1);
printf("填入乘数:\n");
gets(s2);
s2len = strlen(s2);
int n = s1len s2len;
// 初始化res
for (int i = 0; i < 10000; i )
{
res[i] = 0;
}
for (int i = s1len - 1 j = 4999; i >= 0 && j >= s1len; i-- j--)
{
a1[j] = s1[i] - '0';
}
for (int i = s2len - 1 j = 4999; i >= 0 && j >= s2len; i-- j--)
{
a2[j] = s2[i] - '0';
}
// 模拟传统乘法手工算法
for (int i = 4999 k = 9999; i > 4999 - s1len && k >= 0; i-- k--)
{
for (int j = 4999 z = 0; z < s2len && j > 4999 - s2len; j-- z )
{
int temp1 = 0 temp2 = 0;
temp1 = a1[i] * a2[j];
temp2 = (temp1 - (temp1 % 10)) / 10;
res[k - z] = temp1 % 10;
res[k - z - 1] = temp2;
}
}
// 扫描数组res凡是大于9的元素进一位
// 累加到前一个元素
for (int i = 9999; i > 10000 - n; i--)
{
int t1 = 0 t2 = 0;
t1 = res[i];
t2 = (t1 - (t1 % 10)) / 10;
res[i] = t1 % 10;
res[i - 1] = t2;
}
printf("\n乘积为:\n");
for (int i = 10000 - n; i < 10000; i )
{
printf("%d" res[i]);
}
printf("\n");
getchar();
return 0;
}
//部分代码以及测试截图