H - Product
The problem is to multiply two integers X, Y. (0<=X,Y<10250)
InputThe input will consist of a set of pairs of lines. Each line in pair contains one multiplyer.
OutputFor each input pair of lines the output line should consist one integer the product.
Sample Input12 12 2 222222222222222222222222Sample Output
144 444444444444444444444444
思路:因为乘法还是需要进位的所以要转int数组倒叙存储。。
再新开个数组记录结果(注意要初始化)
根据乘法的特点需要用两个for循环来记录每一位上的数。。。(注意先不要进位,,,乘法算完后统一进位)
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <string> #include <cstring> using namespace std; const int N = 10000 ; void multiply(char *a , char *b) { int c[N] , d[N] , e[N]; memset(e , 0 , sizeof(c)); int len1 = strlen(a) , len2 = strlen(b) ; int jj = 0 ; for(int i = len1 - 1 ; i >= 0 ; i--) c[jj++] = a[i] - '0' ; jj = 0 ; for(int i = len2 - 1 ; i >= 0 ; i--) d[jj++] = b[i] - '0' ; int k = 0 ; for(int i = 0 ; i < len1 ; i++) { for(int j = 0 ; j < len2 ; j++) { e[i+j] += c[i] * d[j] ; } } int len = len1 + len2 , x ;//这个len是相乘完之后的可能的最长的长度。。。之后可通过去前置零缩短长度 for(int i = 0 ; i < len ; i++) { x = e[i] ; e[i] = (e[i] + k) % 10 ; k = (x + k) / 10 ; } for(int i = len - 1 ; i >= 0 ; i--) { if(e[i] == 0)//去前置零 { len -- ; } else{ break ; } } if(len == 0) cout << 0 << endl ; else { for(int i = len - 1 ; i >= 0 ; i --) cout << e[i] ; cout << endl ; } } int main() { char a[N] , b[N] , c[N] ; while(~scanf("%s%s" , &a , &b)) { multiply(a , b); } return 0; }