大整数乘法运算代码
来源:互联网 发布:淘喵淘宝互刷流量软件 编辑:程序博客网 时间:2024/06/05 01:51
1,头文件
#include "stdafx.h"#define SIZE 1000#define Get_Array_Len(array,len){len=sizeof(array)/sizeof(array[0]);}int multiply(int[],int a,int m);void charToInteger(char ch[],int inter[]);int add(int a[],int b[],int m,int n,int shift);void multiplyInBigInteger(int a[],int b[],int m,int n);
2,源文件
#include "stdafx.h"#include<iostream>#include"global.h"using namespace std;void main(){int lenA,lenB;char a[SIZE];char b[SIZE];int inteA[SIZE];int inteB[SIZE];printf("***************************\n");printf(" 大整数的乘法运算 \n");printf("***************************\n");printf("请输入大整数A:");scanf("%s",a);printf("\n");printf("请输入大整数B:");scanf("%s",b);printf("\n");charToInteger(a,inteA);charToInteger(b,inteB);lenA=strlen(a);lenB=strlen(b); multiplyInBigInteger(inteA,inteB,lenA,lenB);}/* 功能:完成大整数的相乘,申请一个数组sumarrayA,保存B的倒数第一位与A 相乘的结果,并把它作为最终的输出数组,从B的倒数第二位开始循环与 A相乘后,再移位与A相加。。这里要注意的是数组名作为形参时,相当于 指针,那么形参值改变时,实参的值也会改变B中的元素每次与A相乘时, A应该保持不变的。所以这里申请了一个nochangearrayA数组,来保存 A原来的值。*/void multiplyInBigInteger(int a[],int b[],int m,int n){int sumarrayA[SIZE];int nochangearrayA[SIZE];int sumlen=m;int templenA;int shiftvalue=0;for(int i=0;i<m;i++){sumarrayA[i]=a[i];nochangearrayA[i]=a[i];}sumlen=multiply(sumarrayA,b[n-1],m);for(int i=n-2;i>=0;i--){templenA=multiply(a,b[i],m);shiftvalue++;sumlen=add(sumarrayA,a,sumlen,templenA,shiftvalue);for(int j=0;j<m;j++)a[j]=nochangearrayA[j];}printf("大整数A和B相乘的结果为:");for (int i=0;i<sumlen;i++)printf("%d",sumarrayA[i]);printf("\n");printf("\n");}/* 假设两个大整数A=123445679,B=12345678, 此函数的功能:得到B中的任何一位与A相乘的结果 并返回相乘后,得到数组的长度。 比如:123445679*9=1111011111 注意有进位1。长度也会比A多一个。*/int multiply(int arrA[],int b ,int m){int i,j;int median;int flag=0; for(i=m-1;i>=0;i--) { median=b*arrA[i]+flag; flag=median/10; arrA[i]=median%10; } if(flag) { for(j=m-1;j>=0;j--) arrA[j+1]=arrA[j]; arrA[0]=flag; flag=1; } return (m+flag);}/* 此函数的功能:的到两个整数移位相加的结果,比如 1234 +134 ------ 移位为1,即shift=1 2574 当shift=2时, 1234 +134 ------ 14634 返回:两个数组相加后的长度*/int add(int a[],int b[],int m,int n,int shift){ int len;int length;int sum[SIZE];int flag=0;for(int i=n;i<n+shift;i++)//有几个移位,在数组b中就补几个0b[i]=0;n=n+shift; if (m>n) len=m;elselen=n;length=len;while(m>0&&n>0){sum[len-1]=a[m-1]+b[n-1]+flag;flag=sum[len-1]/10;sum[len-1]=sum[len-1]%10;len--;m--;n--;}while(m>0){sum[len-1]=a[m-1]+flag;flag=sum[len-1]/10;sum[len-1]=sum[len-1]%10;len--;m--;}while(n>0){sum[len-1]=b[n-1]+flag;flag=sum[len-1]/10;sum[len-1]=sum[len-1]%10;len--;n--;}if (flag){ for(int i=length-1;i>=0;i--)sum[i+1]=sum[i]; sum[0]=flag; flag=1;}for(int j=0;j<length+flag;j++)a[j]=sum[j];return (length+flag);}/*将字符数组转换为对应的整型数组比如:ch[]={'1','2','3','4','5'}转换成 inter[]={1,2,3,4,5}*/void charToInteger(char ch[],int inter[]){int len=strlen(ch);for (int i=0;i<len;i++)inter[i]=ch[i]-'0';}
3,运行结果
0 0
- 大整数乘法运算代码
- 大整数运算(乘法)
- 大整数运算(乘法)
- 大整数的乘法运算
- 大整数的乘法运算
- 大整数的乘法运算
- 大整数运算乘法(高精度运算)
- 大整数的乘法与阶乘运算
- 大整数的加法和乘法运算
- 大整数运算之 大整数加法、减法、乘法
- Java 实现大整数加法、乘法、阶乘运算
- 大精度整数三种运算(加法,减法,乘法)
- 大整数乘法
- C++大整数乘法
- 大整数FFT乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法
- Java通过Mathematica实现人脸识别
- 1048. Find Coins (25)
- Spring之Aop与Ioc
- 0006.Map、Tuple、zip实战
- iphone开发之UIButton按钮的使用(一)拖线实现 多个按钮分别用多个方法实现事件监听
- 大整数乘法运算代码
- storm简介
- POJ2299归并排序
- ListView判断是否滚动,保存listview位置状态
- java综合(二)springmvc与spring整合
- Android中Input型输入设备驱动原理分析<一>
- 深入ListView
- Java String浅析
- HDU-1231 最大连续子序列