| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2507 人关注过本帖, 1 人收藏
标题:谁做过大数加减乘除算法
只看楼主 加入收藏
Lupkid
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-18
收藏(1)
 问题点数:0 回复次数:6 
谁做过大数加减乘除算法
乘除怎么实现啊,我想了几天都不知道怎么农弄
搜索更多相关主题的帖子: 大数 加减乘除 算法 
2008-02-09 17:38
Domes
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-11-21
收藏
得分:0 
大概是 多精度运算!
回想一下小学时是如何的做乘除运算吧。乘法和多精度加减法一样,先是单精度和多精度运算,再错位加起就可以。
大数分为数组存储。
2008-02-10 09:08
Lupkid
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-18
收藏
得分:0 
我们学数字逻辑用加法器做过乘法运算,但位数比较少,容易实现,但现在位数不定,中间结果不知道如何处理比较好
2008-02-10 11:35
qzp19880502
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-4-20
收藏
得分:0 
我的,很粗糙,参考
乘法
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
    char str1[500];
    char str2[500];
    int x[1000];
    int a[500];
    int b[500];
    int i;
    int len;
    int m;
    int j;
    int j3;
    int j1,j2;
while (cin>>str1>>str2)
{
    int n=0;
    int y=0;
    int len1=strlen(str1);
    int len2=strlen(str2);
    for (j=0; j<500; j++)
    {
        a[j]=0;
        b[j]=0;
    }
    for (i=0; i<1000; i++)
    {
         x[i]=0;
    }
    for (i=499,len=len1-1; len>=0; i--,len--)
    {
        a[i]=str1[len]-'0';
    }
    for (i=499,len=len2-1; len>=0; i--,len--)
    {
        b[i]=str2[len]-'0';
    }
    for (j1=499; j1>(499-len2); j1--)
    {
        for (j2=499,j3=999; j2>(499-len1); j2--,j3--)
        {
            x[j3-y]=x[j3-y]+(a[j2]*b[j1]);
        }
        y++;
    }
    for (m=999; m>0; m--)
    {
        if (x[m]/10!=0)
        {
            x[m-1]=x[m-1]+x[m]/10;
            x[m]=x[m]%10;            
        }
    }
    for (m=0; m<1000; m++)
    {
        if(x[m]==0)
        {
            continue;
        }
        else
        {
            break;
        }
    }
    if(m==1000)
    {
        cout<<x[0];
    }
    else
    {
        int l;
        for(l=m; l<1000; l++)
        {
            cout<<x[l];
        }
    }
    cout<<endl;
}
    return 0;
}
除法
#include<iostream>
#include<stdio.h>
#include <string.h>
using namespace std;
int main()
{
    char a[950],b[950];
    int a1[950],b1[950],c[950];
    int i,j=0,k,lena,lenb,temp;
    while ( scanf("%s%s",a,b) == 2)
    {
        for(i=0;i<950;i++)
        {
            c[i]=0;
        }
        lena=strlen(a);
        lenb=strlen(b);
        for(i=0;i<lena;i++)
        {
            a1[i]=a[i]-'0';
        }
        for(i=0;i<lenb;i++)
        {
            b1[i]=b[i]-'0';
        }
        for(i=0;i<lenb;i++)
        {
            if(b1[i]==0)
            {
                ;
            }
            else
            {
                break;
            }
        }
        if(i==lenb)
        {
            continue;
        }
        else
        {
           if(lena<lenb||(lena==1&&a1[0]==0))
           {
                cout<<0<<endl;
                continue;
           }
           for(j=0;j<=lena-lenb;j++)
           {
               while(a1[j]>=0)
               {
                   for(k=lenb-1;k>=0;k--)
                   {   
                      a1[j+k]-=b1[k];
                      if(k!=0)
                      {
                         if(a1[j+k]<0)
                         {
                            a1[j+k]+=10;
                            a1[j+k-1]--;
                         }
                      }
                   }
                   c[j+lenb-1]++;
               }
               for(k=lenb-1;k>=0;k--)
               {
                   a1[j+k]+=b1[k];
                   if(a1[j+k]>9)
                   {
                      a1[j+k]-=10;
                      a1[j+k-1]++;
                   }
               }
               c[j+lenb-1]--;
               a1[j+1]+=10*a1[j];
           }
           for(i=lenb-1,temp=0;i<=lena-1;i++)
           {
               if(c[i]!=0)
               {
                     temp=1;
               }
               if(temp==1)
               {
                     printf("%d",c[i]);
               }
           }
          cout<<endl;
        }
    }
    return 0;
}
2008-04-20 14:59
yqsshr
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-11-4
收藏
得分:0 
学习!能解释一下什么意思吗?谢谢4楼!
2008-04-20 20:06
qzp19880502
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-4-20
收藏
得分:0 
~~
就是简单的数组模拟大数运算
2008-04-22 23:13
tanshaoshi
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-4-22
收藏
得分:0 
没有做过除法
2008-04-28 10:28
快速回复:谁做过大数加减乘除算法
数据加载中...
 
   



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

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