今天做到一个用到大数的题目,复习一下。
这是我参考的博客->参考来源链接
#include <iostream>
using namespace std;
#include <cstdio>
#include <cstring>
//大数加法
void calAdd(char* A, char* B, char* res)
{
int lenA = strlen(A);
int lenB = strlen(B);
int i = lenA-1, j = lenB-1, k = 0;
while((i+1) || (j+1))
{
if(i != -1) res[k] += (A[i--]-'0');
if(j != -1) res[k] += (B[j--]-'0');
res[k+1] += res[k]/10;
res[k++] %= 10;
}
while(!res[k] && k>1) k--; //去前导0
if(res[k]) k++; //得到结果的长度k(从1开始)
for(int s = k-1; s >= 0; s--)
res[s] += '0';
for(int s = 0; s < k/2; s++)
swap(res[s], res[k-1-s]);
}
//大数乘法
void calMutiply(char* A, char* B, char* res)
{
int lenA = strlen(A);
int lenB = strlen(B);
int k = 0;
for(int i = 0; i < lenA; i++)
{
for(int j = 0; j < lenB; j++)
{
res[i+j] += (int)((A[lenA-1-i]-'0')*(B[lenB-1-j]-'0'));
if(res[i+j] > 9)
{
res[i+j+1] += res[i+j]/10;
res[i+j] %= 10;
if(i+j+1 > k) k = i+j+1;
}
else if(res[i+j] && i+j > k) k = i+j;
}
}
for(int s = k; s >= 0; s--)
res[s] += '0';
for(int s = 0; s <= k/2; s++)
swap(res[s], res[k-s]);
}
void test01()
{
char A[] = "1111111111";
char B[] = "1111111111";
char ans[2020] = "";
calMutiply(A, B, ans);
cout << " 开始计算! \n";
cout << A << " + " << B << " = " << ans << endl;
}
int main()
{
test01();
system("pause");
return 0;
}