题目链接:简单A*B
题目描述
这是一个非常简单的题,计算 A*B 的值。
输入
第一行:数 A
第二行:数 B
数 A,B 是不超过 1000 位的正整数。
输出
A*B 的值,答案独占一行。
样例输入:
123456
234567
样例输出:
28958703552
解题思路:
同样,也是先用字符数组存下,转化为 int 型数组计算,计算过程中,用另一个数组存下计算结果,然后计算的时候,一位一位进行相乘计算,然后加到相应的位上,最后进行对每一位进位,然后为了不输出前导 0 ,从第一位不为 0 的数开始输出。
代码篇:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int arr[1000] = {0}, brr[1000] = {0}, mut[2010] = {0}, i, j, flag = 0;
char a[1000], b[1000];
cin >> a >> b;
for(i = 0; i < strlen(a); i++) ///首先把字符串转换成int数组
arr[strlen(a) - 1 - i] = a[i] - '0';
for(i = 0; i < strlen(b); i++)
brr[strlen(b) - 1 - i] = b[i] - '0';
for(i = 0; i < strlen(a); i++) ///对应位相乘,加到对应位上面
{
for(j = 0; j < strlen(b); j++)
{
mut[i + j] += arr[i] * brr[j];
}
}
for(i = 0; i <= strlen(a) + strlen(b); i++) ///统一进行进位
{
if(mut[i] >= 10) ///本位留末位,剩下往前扔
{
mut[i + 1] += mut[i]/10;
mut[i] %= 10;
}
}
for(i = strlen(a) + strlen(b); i >= 0; i--) ///防止第一位是0,从第一位不为0的数输出
{
if(mut[i] != 0)
{
for(i = i; i >= 0; i--)
cout << mut[i];
flag = 1;
break;
}
}
if(flag == 0) ///未输出的话,输出0
cout << "0";
return 0;
}