//
// main.cpp
// BigIntegerMulti
//
// Created by mac on 12-11-15.
// Copyright (c) 2012年 Roc. All rights reserved.
//
#include <iostream>
using namespace std;
int mult(int, int);
int digit(int);
int abs(int);
int max(int, int);
int main()
{
int x, y;
while (cin>>x>>y)
{
cout<<x<<" * "<<y<<" = "<<x * y<<endl;
cout<<x<<" * "<<y<<" = "<<mult(x, y)<<endl;
cout<<endl;
}
return 0;
}
int mult(int X, int Y)
{
int s = ((X < 0 && Y > 0) || (X > 0 && Y < 0)) ? -1 : 1;
X = abs(X);
Y = abs(Y);
int n = max(digit(X), digit(Y));
int k = 1;
while (k < n)
{
k <<= 1;
}
n = k;
if (n <= 1)
{
return ((X && Y) ? s : 0);
}
else
{
int A = X >> (n >> 1);
int B = X - (A << (n >> 1));
int C = Y >> (n >> 1);
int D = Y - (C << (n >> 1));
int AC = mult(A, C);
int ABDC = mult(A - B, D - C);
int BD = mult(B, D);
int ans = (AC << n) + ((AC + ABDC + BD) << (n >> 1)) + BD;
return ((s == -1) ? -ans : ans);
}
}
int digit(int x)
{
int t = 0;
while (x)
{
x >>= 1;
t++;
}
return t;
}
int abs(int x)
{
return ((x < 0) ? -x : x);
}
int max(int x, int y)
{
return ((x > y) ? x : y);
}
大整数相乘(未突破计算机位数限制)的int版本
最新推荐文章于 2021-07-08 16:58:12 发布