新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> We choose to study algorithmic problems,  not because they are easy,  but because they are hard.
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机理论与工程『 算法理论与分析 』 → [讨论]用c实现大数类型 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 34074 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: [讨论]用c实现大数类型 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     binaryluo 帅哥哟,离线,有人找我吗?
      
      
      威望:6
      等级:研二(Pi-Calculus看得一头雾水)(版主)
      文章:679
      积分:5543
      门派:IEEE.ORG.CN
      注册:2005/2/19

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给binaryluo发送一个短消息 把binaryluo加入好友 查看binaryluo的个人资料 搜索binaryluo在『 算法理论与分析 』的所有贴子 引用回复这个贴子 回复这个贴子 查看binaryluo的博客楼主
    发贴心情 [讨论]用c实现大数类型

    在java里有一个类BigInteger可以提供了对任意大(位数大)的整数的各种运算操作,现在想自己在c里实现一个有相同功能的类型以供喜欢用c的程序员使用。

    我初想了一下:首先应该建立一个数据类型用来保存大数,然后再定义该大数类型上的各种运算。但是因为比如在乘方运算的时候如果算法设计的不好的话感觉一个乘方运算会很慢,所以想跟大家讨论下。
    下面是我自己设想的数据结构和一些操作:
    ----------------------
    typedef unsigned char elemType;

    typedef struct BigInt{
          elemType num;             //存一位数字
          struct BigInt *next;       //指向下一位数字
    }BigInt, *BigInteger;
    ----------------------
    加法:
    有四个变量,分别申明如下:
    a            //被加数
    b           //加数
    sum       //和
    ar          //进位
    初值都为0;
    1。从被加数和加数中分别取一位数字(0-9)出来赋值给a和b;
    2。让a与b,ar相加,结果存放在sum中;
    3。如果sum的值大于a或b中任何一个数(说明没进位),ar置0;否则有进位,ar置1;
    4。如果被加数或加数中有一个的位数已经加完,则结束;否则继续1-3。

    加法示例:
    add("15", "16")
    第一趟:a=5, b=6, sum=1, ar=1
    第二趟:a=1, b=1, sum=3, ar=0
    结果:"31"。

    --------------------
    其他运算主要都是基于上述加法来实现的,因为各种运算都可以转化成“加”运算。
    下面介绍下乘法:
    n           //乘数
    product  //乘积
    初值都为0;
    n = 乘数
    for i: 0 to n
        product = add(product, 被乘数);

    乘法实例:
    mul("15"," 2")
    n=2
    product=0
    第一趟:add(0, "15")  product="15"
    第二趟:add("15", "15") product="30"
    第三趟:add("30", "15") product="45"

    ----------------------
    其他运算实现思路类似乘法。
    问题:在乘法里遇到一个问题就是“for i: 0 to n”里n肯定只能是c里提供的整型数据类型,所以这里有限制,还请大家讨论下如何解决?


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/8 13:28:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 算法理论与分析 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/29 0:08:50

    本主题贴数12,分页: [1] [2]

     *树形目录 (最近20个回帖) 顶端 
    主题:  [讨论]用c实现大数类型(1730字) - binaryluo,2005年11月8日
        回复:  “每个数组单元可以保存四位数据”——能解释下吗?(48字) - binaryluo,2006年5月4日
        回复:  用c++语言编写的,用数组来存储,每个数组单元可以保存四位数据,这样就可以节约一些空间,数组是动态..(191字) - jq,2006年4月27日
        回复:  我自己的+-* / 函数全编好啦,工作的很完美。下一步想编开方函数。不过我不在乎执行的速度,只..(102字) - Quasi_Algorithmist,2006年4月21日
        回复:  你的这种做法效率太低,很不合适(29字) - yinbodotcc,2006年3月19日
            回复:  [quote][b]以下是引用[i]yinbodotcc在2006-3-19 11:46:00[/..(162字) - binaryluo,2006年3月20日
        回复:  下面是我以前搞ACM时写过的大数类(希望对你有用)://大数类 #include<iostre..(3920字) - wxs1231,2006年2月17日
        回复:  现在加法和减法已经实现了,因为忙所以过久在做乘法和除法。(56字) - binaryluo,2005年12月21日
        回复:  不错(4字) - waruqi,2005年12月19日
        回复:  我还考虑过用数组来存,但是输入的数字长度是随机的,所以用数组每次输入一个数据位的时候还要判断是否已..(173字) - binaryluo,2005年11月28日
        回复:  你的数据结构一个空间存放一位数字,这样设计既浪费空间,时间效率也不高。可以考虑一个空间直接存放In..(108字) - northenstar,2005年11月28日
        回复:  怎么看的人多,回的人少啊??大家一起交流下嘛。。。(50字) - binaryluo,2005年11月12日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    69.031ms