| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 941 人关注过本帖
标题:问题思考
只看楼主 加入收藏
bcomer
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2004-9-13
收藏
 问题点数:0 回复次数:3 
问题思考

前些天有个贴子是说200位数的加法和乘法

找不到在哪了 在这里写一下我的程序的思想

望指点

关于加法

d1[200]转化为a[200]其中a[0]是个位a[1]是十位...

d2[200]同样转化为b[200]

int a[200] ,b[200],c[200],d[201];

d[0]=(a[0]+b[0])%10; /*所求的数组的个位*/

c[0]=(a[0]+b[0]-d[0])/10 /*统计进位的第一次*/

for(i=1;i<201;i++)

{

d[i]=(a[i]+b[i]+c[i-1])%10 /*所求的数组*/

c[i]=(a[i]+b[i]+c[i-1]-d[i])/10 /*统计进位*/

}

关于200位数乘200位数

同样把d1[200]变为a[200]

d2[200]变为b[200]

d[0]=(a[0]*b[0])%10;

c[0]=(a[0]*b[0]-d[0])/10;

for(i=1;i<401;i++)

{

for(j=0;j<i+1;j++)

{

E[i]+=a[j]*b[i];

}

d[i]=(E[i]+c[i-1])%10; /*所求各个数位的数字*/

c[i]=(E[i]+c[i-1]-d[i])/10; /*对进位的标记数*/

}

关于200位减200位数

这里先考虑ABSOLUTE VALUE

如果d1[0]>d2[0]考虑d1-d2

ELSE 考虑d2-d1

同样先把d1[200]变为a[200]

d2[200]变为b[200]

令c[i]=a[i]-b[i];

for(i=0;i<201;i++)

{

if(c[i]<0)

d[i]=1;

else d[i]=0;

c[i]=(c[i]+d[i-1]+10)%10;

}

c[i]就是所求的解

关于200位数和200位数的除法

我的考虑是

找到被除数中第一个不是0的数的位数

变化它 这个可以做到

举个例子

99999/33

99999-33000 if>33000 再减33000 if>33000再减33000用记数器i 统计c[0]的最高位数

if<33000了 差用d[0]记录下来 重复上面操作得到第二个高位数

最后打出c[i]

搜索更多相关主题的帖子: 思考 
2004-09-18 12:24
bcomer
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2004-9-13
收藏
得分:0 

不知道说明白了没有

另外我还想知道

为什么新建文本文档大小为0

而WORD文档为11KB

???

WHY?

2004-09-18 12:25
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
收藏
得分:0 
200位*200位就不是200位了

我的主页 http://www.
2004-09-19 10:52
bcomer
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2004-9-13
收藏
得分:0 
以下是引用jzh2004在2004-09-19 10:52:59的发言: 200位*200位就不是200位了

.....我写的程序里也不是啊200*200我定义的是400以内啊

???

我没写错吧?
2004-09-19 12:18
快速回复:问题思考
数据加载中...
 
   



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

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