UVa 10106 - Product 高精度乘法-
2014-01-30 09:34
393 查看
高精度乘法,主要思想是把第一个因子的个位都与第二个因子每个位相乘后存储对应的i+j的p数组中,接着继续第一个因子的十位,并累加到对应的p【i+j】中,依次进行到最高位。最后再对每个p应用高精度加法的思想,累加取进位和余位。
需要注意的是:积的长度是因子的长度和或者长度和-1
需要注意的是:积的长度是因子的长度和或者长度和-1
//10106 - Product //高精度乘法 #include <iostream> #include <cstring> using namespace std; char product[600], a[300], b[300]; int P[600], A[300], B[300]; int transfort(char *, int *);//把字符数组反转后,转化为int数组 void reverse(int);//按len的长度反转int数组并转换为字符数组 int main() { //freopen("data.txt", "r", stdin); while (scanf("%s%s", a, b) == 2) { if(a[0] == '0' || b[0] == '0')//处理输入为0的情况 { printf("0\n"); continue; } int len_a = transfort(a, A); int len_b = transfort(b, B); int len_P = len_a + len_b; for(int i = 0; i < len_a; i++) for(int j = 0; j < len_b; j++) P[i + j] += A[i] * B[j];//每一对应位的积累加 for(int i = 0; i < len_P - 1; i++) { P[i + 1] += P[i] / 10;//进位的值 P[i] %= 10;//余位 } if(P[len_P - 1] == 0)//判断最高位的值 len_P--;//积的长度为两个因子的长度和或者长度和-1 reverse(len_P); printf("%s\n", product); memset(product, 0, sizeof(product)); memset(P, 0, sizeof(P)); memset(A, 0, sizeof(A)); memset(B, 0, sizeof(B)); memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); } return 0; } void reverse(int n) { for(int j = 0; j < n; j++) product[j] = P[j] + '0'; char c; for(int i = 0; i < n / 2; i++) { c = product[i]; product[i] = product[n - i - 1]; product[n - i - 1] = c; } } int transfort(char * s, int *A) { int len = strlen(s); for(int i = 0; i < len; i++) A[i] = s[len - i - 1] - '0'; return len; }
相关文章推荐
- UVA 10106 Product 简单高精度乘法
- uva 10106 Product(高精度大数乘法)
- UVA 10106 Product 高精度乘法
- (高精度运算4.7.21)UVA 10106 Product(大数乘法)
- (高精度运算4.7.21)UVA 10106 Product(大数乘法)
- uva 424 Integer Inquiry(高精度加法模板) uva 10106 Product(高精度乘法模板)
- UVA 10106高精度乘法
- UVA 10106 Product(大数乘法)
- Uva 10106 Product (高精度相乘)
- UVa 10106 Product (高精度)
- uva10106高精度乘法
- UVA 10106 (暑假-高精度-A - Product)
- Product - UVa 10106 高精度
- uva 10106 Product(大数乘法)
- UVA 10106 - Product(大数乘法)
- UVA 10106-Product(大数乘法)
- UVA-10106 Product
- UVA - 10106 Product
- UVa-10106-Product