<C语言经典100例>c31 大数相乘

来源:互联网 发布:mysql 排序后limit 编辑:程序博客网 时间:2024/06/05 06:15

/* 【程序31】 大数相乘* 题目:求出两个非常大的数的乘积,例如:123456789123456*123456789 * 程序分析:乘积非常大,int、long、long long 等数据类型都装不下这个数怎么办?采用数组方式求。   */#include <stdio.h>#include <string.h>//strlen() memset()#define SIZE 1000void mul_oper(const char num1[], const char num2[]);void output(int num[], int len);int main(int argc, char *argv[]){char num1[SIZE] = {};char num2[SIZE] = {};puts("Input number1:");scanf("%s", num1);fputs("Input number2:\n", stdout);scanf("%s", num2);printf("Result = ");mul_oper(num1, num2);return 0;}// 乘法运算void mul_oper(const char num1[], const char num2[]){unsigned int len1 = strlen(num1);unsigned int len2 = strlen(num2);int result_mul[len1+len2];memset(result_mul, 0, sizeof(result_mul));// 转换并相乘for (int i=0; i<len1; i++){for (int j=0; j<len2; j++){result_mul[i+j+1] += (num1[i]-'0') * (num2[j]-'0');}}// 进位for (int i=len1+len2-1; i>=0; i--){result_mul[i-1] += result_mul[i]/10;result_mul[i] %= 10;}output(result_mul, len1+len2);}// 输出void output(int result[], int len){int k, n = 0;while (result[n] == 0){n++;}for (k=n; k<len; k++){if ((len-k)%3 == 0 && k != n)// 倒数每隔3位输出一个逗号“,”printf(",");printf("%d", result[k]);}//forprintf("\n");}



结果: