求c++大数相乘算法。用数组实现int * fun(int a[],int b[],int c[])

 我来答
ikou007
2012-03-15 · 超过14用户采纳过TA的回答
知道答主
回答量:16
采纳率:0%
帮助的人:31.1万
展开全部
前两天用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;
}
她是我的小太阳
高粉答主

2015-10-27 · 醉心答题,欢迎关注
知道顶级答主
回答量:5.1万
采纳率:83%
帮助的人:8927万
展开全部
/*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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cb8b368
2012-03-15
知道答主
回答量:45
采纳率:100%
帮助的人:16.4万
展开全部
请说清楚点?什么是大数相乘算法?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式