大数与小数相乘算法
发布时间:2020-12-14 04:08:44 所属栏目:大数据 来源:网络整理
导读:#include stdio.h#include string.h/************************************************************************//* 功能:大数乘以小数/* 参数:source:字符型数组,作为被乘数,位数小于500位/* result:存放计算结果,并返回/* m:作为乘数,限定m的取
#include <stdio.h> #include <string.h> /************************************************************************/ /* 功能:大数乘以小数 /* 参数:source:字符型数组,作为被乘数,位数小于500位 /* result:存放计算结果,并返回 /* m:作为乘数,限定m的取值范围为:小于1000000 /************************************************************************/ void Multiply(char *source,char *result,int m) { int i,j,temp,length; int flag = 0,carryBit = 0; char tempArr[1000]; // 最大数为1000位 length = strlen(source); // 将x1x2x3...xn 转换成 xn...x3x2x1,且为数值 for (i = length - 1,j = 0; i >= 0; i--) { tempArr[j++] = source[i] - '0'; } for (i = 0; i < length; i++) { temp = tempArr[i] * m + carryBit; tempArr[i] = temp % 10; carryBit = temp / 10; } while (carryBit) { tempArr[length++] = carryBit % 10; carryBit /= 10; } // 将结果转换成字符型数组,并将结果正序返回 for (i = 0; i < length; i++) { result[length - i - 1] = tempArr[i] + '0'; } result[length] = ' '; } int main() { char source[500]; int m; char result[1000]; scanf("%d%s",&m,source); Multiply(source,result,m); printf("%sn",result); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |