问题描述
求两个不超过200 位的非负整数的积。
输入数据
有两行,每行是一个不超过200 位的非负整数,没有多余的前导0。
输出要求
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能
输出为0342。
输入样例
12345678900
98765432100
输出样例
1219326311126352690000
#include <stdio.h> #include <string.h> int main(){ char cNum1[210], cNum2[210]; scanf("%s", cNum1); scanf("%s", cNum2); int iNum1[210], iNum2[210]; memset(iNum1, 0, sizeof(iNum1)); memset(iNum2, 0, sizeof(iNum2)); int result[410]; memset(result, 0, sizeof(result)); int i, j = 0; for(i = strlen(cNum1) - 1; i >= 0; i--){ iNum1[j] = cNum1[i] - '0'; j++; } j = 0; for(i = strlen(cNum2) - 1; i >= 0; i--){ iNum2[j] = cNum2[i] - '0'; j++; } for(i = 0; i < strlen(cNum2); i++){ for(j = 0; j < strlen(cNum1); j++){ result[j + i] += iNum2[i] * iNum1[j]; } } for(i = 0; i < 200; i++){ if(result[i] >= 10){ result[i + 1] += result[i] / 10; result[i] %= 10; } } for(i = 200; i >= 0; i--){ if(result[i] == 0){ continue; } printf("%d", result[i]); } printf("\n"); return 0; }