加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

C语言 大数相乘法

发布时间:2020-12-14 02:34:43 所属栏目:大数据 来源:网络整理
导读:#define _CRT_SECURE_NO_WARNINGS #include stdio.h #includestdlib.h #include string.h #include memory.h void largeMul(char *numX,char *numY,char *result) { int size1 = strlen(numX);//求乘数的长度 int size2 = strlen(numY);//求被乘数长度 int t
#define _CRT_SECURE_NO_WARNINGS


#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <memory.h>


void largeMul(char *numX,char *numY,char *result)
{
int size1 = strlen(numX);//求乘数的长度
int size2 = strlen(numY);//求被乘数长度

int t;//循环的临时变量
char *tmp = malloc(sizeof(char)* 2048);//分配内存保存中间结果
memset(tmp,2048);//设置内存为空

for (int i = size2 - 1,n=0; i >= 0;i--,n++)
{
if (numY[i] - '0' == 0)
{
continue;
}
memset(tmp,2048);//清空保存中间结果
int m = 0;//位数移动,乘法
int ?r,r2;//临时变量保存结果
for (int j = size1 - 1; j >= 0;j--,m++)
{
//m+n代表位数
r = (numX[j] - '0')*(numY[i] - '0');//每一位相乘的结果
r2 = tmp[m + n] + r;//累加
tmp[m + n] = r2 % 10;//余数
tmp[m + n + 1] = r2 / 10;//进位 +1进位
}

//累加,计算结果
for (t = 0,r2 = 0; t <= m + n + 1 || r2; t++)
{
r = result[t] + tmp[t] + r2;//累加
result[t] = r % 10;//取个位
r2 = r / 10;//进位

}

? ? ? ? ? ? ?}

for (int i = t - 1; i >= 0;i--)
{
if (result[i])//数字前不是0的情况下
{
for (int j = 0; j <= i / 2; j++)//数字对调
{
char temp = result[j] + 48;
result[j] = result[i - j] + 48;
result[i - j] = temp;//交换
}
return;//交换完成直接退出
}
}

result[0] = '0';
return;
}




int main()
{
char str1[1024] = { 0 }; char str2[1024] = { 0 }; scanf("%s%s",str1,str2); char result[2048] = { 0 }; largeMul(str1,str2,result);//调用函数计算 printf("%s * %s = %s",result); printf("n"); system("pause"); return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读