#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] = '\0'; } int main() { char source[500]; int m; char result[1000]; scanf("%d%s",&m,source); Multiply(source,result,m); printf("%s\n",result); return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。