| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4490 人关注过本帖
标题:[原创]大整数乘法
只看楼主 加入收藏
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
 问题点数:0 回复次数:25 
[原创]大整数乘法
看看,自己写的!
xX1R1XTG.rar (6.4 KB) [原创]大整数乘法

搜索更多相关主题的帖子: 乘法 整数 
2005-04-10 17:48
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 
代码共享:

#include<stdio.h>
#define MAXSIZE 255

void init(int *p);           /*初始化数组,全部为-1*/
int input(int *p);             /*输入函数,返回1为负,0为正*/
int youyi(int n,int *p);       /*数组右移一位,高位补n,返回被移掉的一位*/
void tiaozhen(int *p);        /*将数组调整为最后一位为非-1,即为正常数*/
void jia(int *P,int *q);        /*将两个数组按位加,结果保留在a中*/
int weishu(int *P);          /*计算数组中的有效位个数*/
void tjinwei(int *P);           /*将数组各位调整为不大于10的整数*/
void chen(int *p,int *q);           /*计算两个数组的乘积,并输出结果*/
int error(int *P);                 /*判断数组各位是否为0-9之间的数,正确为0,错误为1*/
void clear(int *p);           /*将数清零*/

int main()
{int a[MAXSIZE],b[MAXSIZE],f1,f2,i;
init(a);init(b);
printf("Input the first number:");
f1=input(a);
printf("Input the second number:");
f2=input(b);
printf("\n\n\tOK!\n\n");
tiaozhen(a);tiaozhen(b);
if(error(a)||error(b)) {printf("Input error!\n");exit(0);}
i=0;
while(a[i]==0) i++;
while(i<MAXSIZE) printf("%d",a[i++]);
putchar('*');
i=0;
while(b[i]==0) i++;
while(i<MAXSIZE) printf("%d",b[i++]);
printf("= ");
if(f1!=f2) putchar('-');
chen(a,b);
printf("\n\n\tEnd!\n");
getch();
return 1;
}

void init(int a[])
{int i;
for(i=0;i<MAXSIZE;i++)
a[i]=-1;
}

int input(int a[])
{char c;
int i,f=0;
i=0; c=getch();
if(c=='-') {f=1;putchar('-'); c=getch();}
while((c>='0'&&c<='9')&&c!='\n')
{a[i++]=c-'0';
putchar(c);
c=getch();
}
printf("\n");
return f;
}

int youyi(int n,int a[])
{int i,t;
t=a[MAXSIZE-1];
for(i=MAXSIZE-1;i>0;i--)
a[i]=a[i-1];
a[0]=n;
return t;
}

void tiaozhen(int a[])
{while(a[MAXSIZE-1]==-1)
youyi(0,a);
}

int error(int a[])
{int i,s=0;
for(i=0;i<MAXSIZE;i++)
if(a[i]>10||a[i]<0) break;
if(i<MAXSIZE) s=1;
return s;
}

void jia(int a[],int b[])
{int i;
for(i=0;i<MAXSIZE;i++)
a[i]=a[i]+b[i];
tjinwei(a);
}

int weishu(int a[])
{int i,cnt=0;
for(i=0;!a[i];i++)
cnt++;
cnt=MAXSIZE-cnt;
return cnt;
}

void tjinwei(int a[])
{int i;
for(i=MAXSIZE-1;i>0;i--)
{a[i-1]=a[i-1]+a[i]/10;
a[i]=a[i]%10;
}
}

void chen(int a[],int b[])
{int s[MAXSIZE],tt[MAXSIZE],i,j,l1,l2,t,d;
clear(s);
l1=weishu(a);
l2=weishu(b);
for(i=0;i<l2;i++)
{t=b[MAXSIZE-1];
clear(tt);
for(j=0;j<l1;j++)
tt[MAXSIZE-1-j]=t*a[MAXSIZE-1-j];
tjinwei(tt);
jia(s,tt);
d=youyi(0,s);
youyi(d,b);
}
i=0;
while(s[i]==0) i++;
while(i<MAXSIZE) printf("%d",s[i++]);
for(i=0;i<l2;i++) printf("%d",b[i]);
printf("\n");
}

void clear(int a[])
{int i;
for(i=0;i<MAXSIZE;i++)
a[i]=0;
}


写得不好的地方望指出!

[此贴子已经被作者于2005-4-10 18:07:28编辑过]



2005-04-10 18:06
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
晕,我要去上课了啊,一个星期后才回来,按照每天300~400的发贴量我估计是看不到你的贴子了
先顶顶

淘宝杜琨
2005-04-10 18:10
静夜思
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:济南的冬天
等 级:管理员
威 望:11
帖 子:8913
专家分:2567
注 册:2004-3-25
收藏
得分:0 
可以收藏自己觉得有价值的帖子

畅所欲言
2005-04-10 18:24
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
how?

淘宝杜琨
2005-04-10 18:26
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
静夜思 也来过啊,我好久没来了!

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2005-04-10 18:42
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 
以下是引用静夜思在2005-4-10 18:24:14的发言: 可以收藏自己觉得有价值的帖子
啊,怎么收藏啊?教教我!

2005-04-10 19:55
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
就是Ctrl+C
然后打开文本编辑器,然后Ctrl+V区一个名字ok

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2005-04-11 01:03
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 
还是不明白!

2005-04-11 14:17
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
建议考虑一下效率
tjinwei()这个函数没必要,或者必需进行优化(有很多无用操作,其实完全可以不用jinwei,在jia()利用一个next存进位写a[i]=a[i]+b[i]+next;next=a[i]%10;a[i]=a[i]/10;就可以了)

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-04-11 17:19
快速回复:[原创]大整数乘法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025239 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved