快捷搜索:  汽车  科技

分数连乘算法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;

}

//部分代码以及测试截图

分数连乘算法c语言:大整数乘法算法(1)

分数连乘算法c语言:大整数乘法算法(2)

分数连乘算法c语言:大整数乘法算法(3)

猜您喜欢: