 |
如果您学习过汇编语言,您就知道在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, 其他方面, 。
|