大数运算之大数乘法
发布时间:2020-12-14 02:47:14 所属栏目:大数据 来源:网络整理
导读:关于大数运算的乘法运算,无疑还是采用字符串的输入,然后进行反转字符串,最后进行进位运算即判断数是否大于等于10,是的话则进一位。然后判断最高位所在的位置,进行输出。 直接上代码,水平有限,目前只能写出这种水平的了,多多指教 /*Name: 大数乘法 Co
关于大数运算的乘法运算,无疑还是采用字符串的输入,然后进行反转字符串,最后进行进位运算即判断数是否大于等于10,是的话则进一位。然后判断最高位所在的位置,进行输出。 直接上代码,水平有限,目前只能写出这种水平的了,多多指教
/* Name: 大数乘法 Copyright: Author: sty Date: 15/2/7 Description: */ #include<stdio.h> #include<string.h> #define MAX 1000 char a[MAX]; char b[MAX]; int a1[MAX]; int b1[MAX]; int c[2 * MAX]; int main() { int i,j,k; int len_a,len_b; while ((scanf("%s%s",a,b)) != EOF) { //清零操作 for (i = 0; i < MAX; i++) { a1[i] = 0; b1[i] = 0; } for (i = 0; i < 2 * MAX; i++) { c[i] = 0; } //反转操作 len_a = strlen(a); for (i = 0; i < len_a; i++) { a1[i] = a[len_a - 1 - i] - '0'; } len_b = strlen(b); for (i = 0; i < len_b; i++) { b1[i] = b[len_b - 1 - i] - '0'; } for (i = 0; i < len_a; i++) { for (j = 0; j < len_b; j++) { c[i + j] += a1[i] * b1[j]; } } k = 2 * MAX - 1; while ( k>=0 && c[k]==0 ) //寻找最高位 { k--; } //进位 for (i = 0; i <= k; i++) { if (c[i] >= 10) { c[i + 1] += c[i] / 10; c[i] = c[i] % 10; } } int f = 0; //判断输出 for (i = k + 10; i >= 0; i--) { if (c[i]) f = 1; if (f || i == 0 ) printf("%d",c[i]); } printf("n"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |