求大数除法算法

zhouhui915 2011-03-18 08:01:15
大家有没有好的求大数除法的方法,思路。
...全文
428 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhouhui915 的回复:]

我做的是用两个字符串数组来保存两个十进制操作数,两个数的长度可以不相等,要能运算20位以上的十进制数。大数加减乘我都很快实现了,就是除法没找到思路。有什么好的说来看看。
[/Quote]http://download.csdn.net/source/403510

这是我大学时写的~~~仅供参考!
xali 2011-03-18
  • 打赏
  • 举报
回复
128位大整数运算源代码,你要的都有
http://download.csdn.net/source/971780
zhouhui915 2011-03-18
  • 打赏
  • 举报
回复
我做的是用两个字符串数组来保存两个十进制操作数,两个数的长度可以不相等,要能运算20位以上的十进制数。大数加减乘我都很快实现了,就是除法没找到思路。有什么好的说来看看。
驴被脑袋踢了 2011-03-18
  • 打赏
  • 举报
回复
直接用BAIDU搜一下, 大数乘法,大数除法,很多滴
Joanna-zhang 2011-03-18
  • 打赏
  • 举报
回复
我这里有个大数运算的程序 是原来写东西 用来参考的 不知道合适你用不
JungleWei 2011-03-18
  • 打赏
  • 举报
回复

① 高精度乘以低精度;

算法:将多位数存入数组,低位在前、高位在后,然后用一位数去乘数组的各位,考虑进位,最后按按正常顺序输出。源程序如下:

#include <stdio.h>
#define N 200

main()

{

int a[N] = {0};

int i, j, k, m;

char b[N] = {0};

printf("Input two numbers:\n");

scanf("%d ", &m);

scanf("%s", b);

k = strlen(b);

for(i = 0; i < k; i++) a[i] = b[k - i - 1] - '0';

a[0] = a[0] * m;

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

{

a[i] = a[i] * m;

a[i] = a[i] + a[i - 1] /10;

a[i - 1] = a[i - 1] % 10;

}

while(a[k - 1] >= 10)

{

k++;

a[k - 1] = a[k - 2] / 10;

a[k - 2] = a[k - 2] % 10;

}

for(i = k - 1; i>=0; i--) printf("%d", a[i]);

}

② 高精度除以低精度;

算法:按照从高位到低位的顺序,逐位相除。在除到第j位时,该位在接受了来自第j+1位的余数后与除数相除,如果最高位为零,则商的长度减一。源程序如下:

#include <stdio.h>
#define N 500

main()

{

int a[N] = {0}, c[N] = {0};

int i, k, d, b;

char a1[N];

printf("Input 除数:");

scanf("%d", &b);

printf("Input 被除数:");

scanf("%s", a1);

k = strlen(a1);

for(i = 0; i < k; i++) a[i] = a1[k - i - 1] - '0';

d = 0;

for(i = k - 1; i >= 0 ; i--)

{

d = d * 10 + a[i];

c[i] = d / b;

d = d % b;

}

while(c[k - 1] == 0 && k > 1) k--;

printf("商=");

for(i = k - 1; i >= 0; i--) printf("%d", c[i]);

printf("\n余数=%d", d);

}
JungleWei 2011-03-18
  • 打赏
  • 举报
回复
① 高精度乘以低精度;

算法:将多位数存入数组,低位在前、高位在后,然后用一位数去乘数组的各位,考虑进位,最后按按正常顺序输出。源程序如下:

#include <stdio.h>
#define N 200

main()

{

int a[N] = {0};

int i, j, k, m;

char b[N] = {0};

printf("Input two numbers:\n");

scanf("%d ", &m);

scanf("%s", b);

k = strlen(b);

for(i = 0; i < k; i++) a[i] = b[k - i - 1] - '0';

a[0] = a[0] * m;

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

{

a[i] = a[i] * m;

a[i] = a[i] + a[i - 1] /10;

a[i - 1] = a[i - 1] % 10;

}

while(a[k - 1] >= 10)

{

k++;

a[k - 1] = a[k - 2] / 10;

a[k - 2] = a[k - 2] % 10;

}

for(i = k - 1; i>=0; i--) printf("%d", a[i]);

}

② 高精度除以低精度;

算法:按照从高位到低位的顺序,逐位相除。在除到第j位时,该位在接受了来自第j+1位的余数后与除数相除,如果最高位为零,则商的长度减一。源程序如下:

#include <stdio.h>
#define N 500

main()

{

int a[N] = {0}, c[N] = {0};

int i, k, d, b;

char a1[N];

printf("Input 除数:");

scanf("%d", &b);

printf("Input 被除数:");

scanf("%s", a1);

k = strlen(a1);

for(i = 0; i < k; i++) a[i] = a1[k - i - 1] - '0';

d = 0;

for(i = k - 1; i >= 0 ; i--)

{

d = d * 10 + a[i];

c[i] = d / b;

d = d % b;

}

while(c[k - 1] == 0 && k > 1) k--;

printf("商=");

for(i = k - 1; i >= 0; i--) printf("%d", c[i]);

printf("\n余数=%d", d);

}
zhouhui915 2011-03-18
  • 打赏
  • 举报
回复
怎么会没听过大数问题?
神经质女孩 2011-03-18
  • 打赏
  • 举报
回复
不明白你说的意思

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧