#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; }