#include <stdio.h>
#include <string.h>
#define N 1000//最大1000位
int input(char n[]){
char s[N],temp;
int i,j,positive;
scanf("%s",s);
j=strlen(s);
for(i=0;i<N;i++){
n[i]=0;
}
if(s[0]=='-'){
positive=-1;
for(i=0;i<j-1;i++){
temp=s[i];s[i]=s[i+1];s[i+1]=temp;
}
j=j-1;
}else{
positive=1;
}
for(i=0;i<j;i++){
n[i]=s[j-i-1]-'0';
}
return positive;
}
int multi(char p[],char q[],char r[],int posi1,int posi2){
int i=0,j=0;;
for(i=0;i<N;i++){
r[i]=0;
}
for(i=0;i<strlen(p);i++)
for(j=0;j<strlen(q);j++){
r[i+j]+=p[i]*q[j];
if(r[i+j]>=10){
r[i+j+1]+=r[i+j]/10;
r[i+j]=r[i+j]%10;
}
}
if(posi1*posi2==1)
return 1;
else
return -1;
}
void output(char r[],int positive){
int i=0;
for(i=N-1;i>=0;i--){
if(r[i]!=0)
break;
}
if(positive==-1){
printf("-");
}
for(;i>=0;i--){
printf("%d",r[i]);
}
putchar('\n');
}
void main(){
char p[N],q[N],r[N];
int posi1,posi2,res1;
posi1=input(p);
posi2=input(q);
output(p,posi1);
output(q,posi2);
res1=multi(p,q,r,posi1,posi2);
output(r,res1);
}
分享到:
相关推荐
大数乘法 用字符串实现大数乘法,大整数乘法,用string类实现
大数乘法是公钥加密中最为核心的计算环节之一,快速实现大数乘法单元也是RSA、ElGamal、全同态等密码体制急需解决的问题之一。目前,基于C 的NTL GMP库函数虽然能在CPU上实现高精度的大数乘法,但其仍不能满足加密对...
用C++写的重载的大数模板 大数加法、大数乘法、大数除法、大数减法 带有注释
16进制大数乘法,支持unsigned char 数组数据,任意长度相乘
基于字符串的大数乘法 有效解决大数乘法溢出的问题
用VC6.0实现的大数乘法,这是算法设计实验的一个小题目
大数乘法
个人在vc6.0上用C写的大数乘法的程序。
C#编写的大数乘法运算原代码 运行环境VS
算法设计,利用c语言实现大数乘法,如需更多帮助,请发邮件至1436125018#qq。com(发送时请把地址中的‘#’换成‘@’)
该段程序使用简短的算法就可完成两个大数相乘的过程
可以高效快速的实现两个大数相乘,可以C运行
Q714586 C语言大数乘法的运算 https://ask.csdn.net/questions/714586
任意两个大数乘法,理论上可算2G长度的两个数的乘法,C++实现,在VS 2008下编译通过
大数在c++编程中常常遇到的问题,尤其是乘法,给出了相应的解法
低效率大数运算类
用java写的动态数组实现的大数乘法.两个大数相乘:利用数组实现,数组a存放大数1的每一位,数组b依次存放大数2的每一位。如:一大数1为3463546,则数组 a[]={3,4,6,3,5,4,6},大数2为:89019 则数组b[]={8,9,0,1,9},...
大数相乘,超出整型最大数值时,不能直接进行乘法运算。将该数拆分,进行运算
大数乘法比较简单的数组实现,实现两个大数相乘的结果。给予初学者提供思路
大数乘法的基本实现。使用的是数组的原理比较简单。