软件注册站
热情软件屋

 
如何实现 300位整数*300位整数的算法
编号: QA003557    
建立日期: 2000年11月16日 最后修改日期: 2003年12月20日
所属类别: C/C++ - 其他方面
   
    操作系统: win98
    编程工具: tc
    问题: 请问那位大虾知道如何实现 300位整数*300位整数的算法?从输入到输出!谢谢。
    水平: 中级(sapphire)
   
    如果您学习过汇编语言,您就知道在16位处理器的汇编语言中处理32位数据和64位数据的方法,而以此推广,在您的应用程序中要使用300位*300位的整数算法,唯一途径是自己管理存储空间,在C++中可以定义这么一个300位的整数类,类中定义数据的赋值,取值以及相应的运算成员函数,在TC中没有类,可以使用结构体加函数的方式实现。例如,假设TC中的整数是32位的,按就可以定义有10个元素的结构体,每个元素分别代表320位整数的相应位段,运算时取出每个位段分别进行,然后结果要存储在一个又比300为大的多的一个数据结构里。原理很明确,但实现很琐碎。祝您成功!
    
    lloma的意见:
    这是两个正整数,
    #define N 300
    
#include<string.h>
    
#include<stdio.h>
    
main()
    
{
    
char a[N],b[N];
    
int an,bn,i,r,ia[N],ib[N],c[2*N+1],n,m;
    
scanf("%s%s",a,b);
    
an=strlen(a);
    
bn=strlen(b);
    
for(i=0;i<an;i++)
    
ia[an-i-1]=a[i]-'0';
    
for(i=0;i<bn;i++)
    
ib[bn-i-1]=b[i]-'0';
    
for(i=0;i<2*N+1;i++)
    
c[i]=0;
    
for(i=0;i<an;i++){
    
for(r=0;r<bn;r++){
    
c[i+r]=c[i+r]+ia[i]*ib[r];}}
    
for(i=0;i<2*N+1;i++)
    
{
    
m=c[i];
    
c[i]=m%10;
    
c[i+1]=m/10+c[i+1];
    
}
    
i=2*N-1;
    
while(c[i]==0){i--;}
    
for(;i>=0;i--)
    
printf("%d",c[i]);
    
}
    
    

    
    backup&&chinawit的意见:
    廖显刚同志的答案有错,但可做借鉴。我与同学调试一个基本成形的2个N位数相乘的程序,N=2,5,10等测试通过,但是建议您用汇编来实现,其它语言完成此项任务,效率极为低下!
     #define N 10
    
#include<string.h>
    
#include<stdio.h>
    
main()
    
{
    
char a[N],b[N];
    
unsigned int an,bn,i,r,ia[N],ib[N],c[2*N+1],n,m,j;
    
scanf("%s%s",a,b);
    
; an=strlen(a);
    
; bn=strlen(b);
    
for(i=0;i<N;i++) ia[N-i-1]=a[i]-'0';
    
for(i=0;i<N;i++) ib[N-i-1]=b[i]-'0';
    
for(i=0;i<2*N+1;i++)
    
c[i]=0;
    
for(i=0;i<N;i++)
    
{
    
if(ib[i]==1)
    
{
    
for(j=i;j<N+i;j++)
    
{
    
c[j]+=ia[j-i];
    
if(c[j]==3)
    
{ c[j]=1; c[j+1]+=1;}
    
else if(c[j]==2)
    
{c[j]=0; c[j+1]+=1;}
    
}
    
}
    
else
    
{
    
for(j=2*N+1;j=0;j--)
    
{c[j]=c[j-1];}
    
}
    
}
    
for(i=0;i<2*N+1;i++)
    
{
    
printf("%c",c[2*N-i]+0x30);
    
}
    
printf("\n");
    
    
getch();
    
}
    

    

此问题由廖显刚回答。

附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 其他方面,

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio