UVA 10106-Product
题目大意:大位数乘法
解题思路:用数组模拟
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
void mul(char* a, char* b) {
int l1 = strlen(a);
int l2 = strlen(b);
int m[10000], n[10000], s[10000];
int k = 0;
memset(s, 0, sizeof(s));
for(int i = l1 - 1; i >= 0; i--)
m[k++] = a[i] - '0';
k = 0;
for(int i = l2 - 1; i >= 0; i--)
n[k++] = b[i] - '0';
for(int i = 0; i < l1; i++) {
k = i;
for(int j = 0; j < l2; j++) {
s[k] = s[k] + m[i] * n[j];
k++;
}
}
int u = 0;
for(int i = 0; i < l1 + l2; i++) {
s[i] = s[i] + u;
u = s[i] / 10;
s[i] = s[i] % 10;
}
k = -1;
char c[10000];
for(int i = l1 + l2 - 1; i >= 0; i--) {
if(k != -1)
c[k++] = '0' + s[i];
else if(s[i] != 0) {
k = 0;
c[k++] = '0' + s[i];
}
}
if(k == -1) {
c[0] = '0';
c[1] = '\0';
}
else
c[k] = '\0';
strcpy(a, c);
}
int main() {
char a[10000],b[10000];
while(gets(a)) {
gets(b);
mul(a, b);
puts(a);
}
return 0;
}