求c++大数相乘算法。用数组实现int * fun(int a[],int b[],int c[])
3个回答
展开全部
前两天用C写的。也是用数组实现的:
/*50bit * 50bit*/
#include <stdio.h>
#include <string.h>
#define NR 50
void reverse(char *str,int len)
{
int i,j;
char tmp;
for(i=0;i<len/2;i++)
{
j=len-i-1;
tmp=str[i];
str[i]=str[j];
str[j]=tmp;
}
}
int main(void)
{
/**/
char a1[NR+1],a2[NR+1], sum[2*NR+1]={0};
int len1,len2,i,j;
int flag=0,num;
printf("please input 被乘数: ");
scanf("%s",a1);
printf("please input 乘数 : ");
scanf("%s",a2);
/*数组翻转*/
len1=strlen(a1);
reverse(a1,len1);
len2=strlen(a2);
reverse(a2,len2);
//printf("%s %s\n",a1,a2);
/*被乘数a1*/
for(i=0;i<len1;i++)
{ /*乘数a2*/
for(j=0;j<len2;j++)
{
/*乘数第J位乘以被乘数的第I位*/
sum[i+j] += (a1[i]-'0') *(a2[j]-'0');
}
for(flag=j=0;j<2*NR;j++)
{
num=sum[j]+flag;
flag=num/10; //flag 表示进位的值
sum[j]=num%10; //进位后的值
}
}
reverse(sum,2*NR);
for(i=0;i<2*NR;i++)
{
sum[i] += '0';
}
for(i=0;i<2*NR;i++)
{
if(sum[i] != '0') break;
}
reverse(a1,len1);
reverse(a2,len2);
printf("%s*%s\n%s\n",a1,a2,sum+i);
return 0;
}
/*50bit * 50bit*/
#include <stdio.h>
#include <string.h>
#define NR 50
void reverse(char *str,int len)
{
int i,j;
char tmp;
for(i=0;i<len/2;i++)
{
j=len-i-1;
tmp=str[i];
str[i]=str[j];
str[j]=tmp;
}
}
int main(void)
{
/**/
char a1[NR+1],a2[NR+1], sum[2*NR+1]={0};
int len1,len2,i,j;
int flag=0,num;
printf("please input 被乘数: ");
scanf("%s",a1);
printf("please input 乘数 : ");
scanf("%s",a2);
/*数组翻转*/
len1=strlen(a1);
reverse(a1,len1);
len2=strlen(a2);
reverse(a2,len2);
//printf("%s %s\n",a1,a2);
/*被乘数a1*/
for(i=0;i<len1;i++)
{ /*乘数a2*/
for(j=0;j<len2;j++)
{
/*乘数第J位乘以被乘数的第I位*/
sum[i+j] += (a1[i]-'0') *(a2[j]-'0');
}
for(flag=j=0;j<2*NR;j++)
{
num=sum[j]+flag;
flag=num/10; //flag 表示进位的值
sum[j]=num%10; //进位后的值
}
}
reverse(sum,2*NR);
for(i=0;i<2*NR;i++)
{
sum[i] += '0';
}
for(i=0;i<2*NR;i++)
{
if(sum[i] != '0') break;
}
reverse(a1,len1);
reverse(a2,len2);
printf("%s*%s\n%s\n",a1,a2,sum+i);
return 0;
}
展开全部
/*50bit * 50bit*/
#include <stdio.h>
#include <string.h>
#define NR 50
void reverse(char *str,int len)
{
int i,j;
char tmp;
for(i=0;i<len/2;i++)
{
j=len-i-1;
tmp=str[i];
str[i]=str[j];
str[j]=tmp;
}
}
int main(void)
{
/**/
char a1[NR+1],a2[NR+1], sum[2*NR+1]={0};
int len1,len2,i,j;
int flag=0,num;
printf("please input 被乘数: ");
scanf("%s",a1);
printf("please input 乘数 : ");
scanf("%s",a2);
/*数组翻转*/
len1=strlen(a1);
reverse(a1,len1);
len2=strlen(a2);
reverse(a2,len2);
//printf("%s %s\n",a1,a2);
/*被乘数a1*/
for(i=0;i<len1;i++)
{ /*乘数a2*/
for(j=0;j<len2;j++)
{
/*乘数第J位乘以被乘数的第I位*/
sum[i+j] += (a1[i]-'0') *(a2[j]-'0');
}
for(flag=j=0;j<2*NR;j++)
{
num=sum[j]+flag;
flag=num/10; //flag 表示进位的值
sum[j]=num%10; //进位后的值
}
}
reverse(sum,2*NR);
for(i=0;i<2*NR;i++)
{
sum[i] += '0';
}
for(i=0;i<2*NR;i++)
{
if(sum[i] != '0') break;
}
reverse(a1,len1);
reverse(a2,len2);
printf("%s*%s\n%s\n",a1,a2,sum+i);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请说清楚点?什么是大数相乘算法?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询