乘法通过查表实现

来源:互联网 发布:微信小动画制作软件 编辑:程序博客网 时间:2024/05/01 15:22

本文主要通过小学学的99乘法表实现

// 乘法原始实现.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include<iostream>
#include<list>
#include<vector>
using namespace std;


int array_result[10][10]={
{0,0,0,0,0,0,0,0,0,0},
{0,1,2,3,4,5,6,7,8,9},
{0,2,4,6,8,10,12,14,16,18},
{0,3,6,9,12,15,18,21,24,27},
{0,4,8,12,16,20,24,28,32,36},
{0,5,10,15,20,25,30,35,40,45},
{0,6,12,18,24,30,36,42,48,54},
{0,7,14,21,28,35,42,49,56,63},
{0,8,16,24,32,40,48,56,64,72},
{0,9,18,27,36,45,54,63,72,81}
};


int getCount(int num){
int i=0;
while(num!=0){
num=num/10;
i++;
}
return i;
};
void get_int_to_char(int*k,int n,int num){//参数1保存整数

while(n>0){
    n--;
k[n]=num%10;
num=num/10;
}


};
void multiply_int(int a,int b){
if(a==0||b==0){
return ;
}
int a_count=getCount(a);
int b_count=getCount(b);
int* a_int=new int[a_count];
int* b_int=new int[b_count];
get_int_to_char(a_int,a_count,a);//得到整数数组形式数组低位(0)存放整数的最高位,高位存放整数的最低位
get_int_to_char(b_int,b_count,b);
list<vector<int>> all;
int jinwei=0;//进位
int count=b_count+a_count-1;//相乘后先假设其是位数最小的情况
for(int i=b_count-1;i>=0;i--){
vector<int> unit;
for(int j=a_count-1;j>=0;j--){
 int temp=array_result[b_int[i]][a_int[j]]+jinwei;
 if(temp>9){
 jinwei=temp/10;
 temp=temp%10;
 unit.push_back(temp);//把低位先放进去
   if(j==0){
  unit.push_back(jinwei);
  if(i==0)
  count++;//最后一位相乘 例如234*32 如果3*234最高位有进位
 }
 }
 else{
 unit.push_back(temp);//从低位先放进去后放高位
 }
}
jinwei=0;
all.push_back(unit);    
}
int*sum=new int[count];
for(int i=0;i<count;i++){
 sum[i]=0; 
}
auto ib=all.begin();
auto ie=all.end();
//在sum数组的偏移位置
int index=0;//例如234*546  根据上面得到的 链表234*6结果的数组表达形式—链表234*4结果的数组表达形式—链表234*5结果的数组表达形式


jinwei=0;
for(;ib!=ie;ib++){//例如234*546  根据上面得到的 链表234*6结果的数组表达形式—链表234*4结果的数组表达形式—链表234*5结果的数组表达形式
 auto ibson=(*ib).begin();//把他们依次根据他们的位数加入到sum
 auto ieson=(*ib).end();
 int sonindex=0;
 for(;ibson!=ieson;ibson++,sonindex++){
 sum[index+sonindex]+=*ibson+jinwei;
 if(sum[index+sonindex]>9){//如果有进位
  jinwei=sum[index+sonindex]/10;
  sum[index+sonindex]=sum[index+sonindex]%10;
 }
 else{
 jinwei=0;
 }
 }
 index++;
}
  for(int i=0;i<count;i++){
cout<<sum[i]<<endl;
}
  delete sum;
  sum=nullptr;
  delete a_int;
  a_int=nullptr;
  delete b_int;
  b_int=nullptr;
  }




int _tmain(int argc, _TCHAR* argv[])
{
multiply_int(4000000,40);//30 24
return 0;
}


0 0
原创粉丝点击