| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5160 人关注过本帖
标题:怎么实现高精度乘法?
只看楼主 加入收藏
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
结帖率:79.37%
收藏
已结贴  问题点数:20 回复次数:21 
怎么实现高精度乘法?
RT,是不是用字符串来保存,举个例子吧?
搜索更多相关主题的帖子: 乘法 高精度 
2010-11-01 19:27
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:2 
回复 楼主 sunyh1999
不一定要用字符串,字符串只能一位一位的,效率不高,你可以用int [][]来存,每个int可存5位数。

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2010-11-01 19:29
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:2 
https://gist.
2010-11-01 20:14
EastHP
Rank: 2
来 自:北京海淀
等 级:论坛游民
帖 子:33
专家分:24
注 册:2010-9-30
收藏
得分:2 
多位数乘以多数位,输入比较繁琐。
写个3*3的给楼主看看。
程序代码:
#include<stdio.h>
#define N 3
int main(){
    int a[3] = {2,3,4}, b[3]={4,5,5}, c[2*N]={0};
    int i, j, temp;

    for (i=2; i>=0; i--)
    {
        for (j=2; j>=0; j--)
        {
            c[2*N-1-(N-1-i+N-1-j)]=a[i]*b[j]+c[2*N-1-(N-1-i+N-1-j)];
        }
    }

    for (i=2*N-1; i>0; i--)
    {
        temp = c[i]/10;
        c[i] = c[i]%10;
        c[i-1] = c[i-1]+temp;
    }

    for (i=0; i<2*N; i++)
    {
        printf("%d",c[i]);
    }

    return 0;
}
大整数运算.zip (62.49 KB)

2010-11-01 20:22
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:2 
读入的时候,一定是需要以字符串的方式读入,至于读入之后,在内部给转换成类似2楼的那种方式进行处理。

编程的道路上何其孤独!
2010-11-02 12:28
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:2 
感觉版主不应该问这个问题啊,

我就是真命天子,顺我者生,逆我者死!
2010-11-02 12:32
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:2 
来收4#的源代码
呵呵
2010-11-03 11:00
slowlyzl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:85
专家分:170
注 册:2010-10-20
收藏
得分:2 
可以学习下 研究下
2010-11-03 21:15
swp160108
Rank: 2
等 级:论坛游民
威 望:4
帖 子:63
专家分:98
注 册:2008-11-10
收藏
得分:2 
# include<stdio.h>
# include<string.h>
# include<malloc.h>

void multiply(char* a, char* b, char* c)
{
    int i, j, ca, cb, * s;
    ca = strlen(a);
    cb = strlen(b);
    s = (int*)malloc(sizeof(int) * (ca + cb));
    for (i = 0; i < ca + cb; i++)
        s[i] = 0;
    for (i = 0; i < ca; i++)
        for (j = 0; j < cb; j++)
            s[i+j+1] += (a[i] - '0') * (b[j] - '0');
    for (i = ca + cb - 1; i >= 0; i--)
        if (s[i] >= 10)
        {
            s[i-1] += s[i] / 10;
            s[i] %= 10;
        }
    i = 0;
    while (s[i] == 0)
        i++;
    for (j = 0; i < ca + cb; i++, j++)
        c[j] = s[i] + '0';
    c[j] = '\0';
    free(s);
}
2010-11-05 09:07
lwlls668
Rank: 2
等 级:论坛游民
帖 子:59
专家分:72
注 册:2010-4-9
收藏
得分:2 
反正我是看不懂的
2010-11-05 16:28
快速回复:怎么实现高精度乘法?
数据加载中...
 
   



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

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