免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11572 | 回复: 16
打印 上一主题 下一主题

大数运算求助:如何将一个超长的二进制字符串转换为十进制字符串 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-25 23:04 |只看该作者 |倒序浏览
比如2的2000次方这样数量级的,我想了办天也没想出来,请大家提提思路。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
2 [报告]
发表于 2010-11-25 23:34 |只看该作者
这么大的数量级就要考虑存储了。

论坛徽章:
0
3 [报告]
发表于 2010-11-25 23:37 |只看该作者
回复 2# ecjtubaowp
先去掉这些不管,有没有转换为十进制的思路呢

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2010-11-26 08:37 |只看该作者
大数运算,循环%10再除10

论坛徽章:
0
5 [报告]
发表于 2010-11-26 08:39 |只看该作者
用数组保存

论坛徽章:
0
6 [报告]
发表于 2010-11-26 08:53 |只看该作者
回复 4# hellioncu


    这么大的数早溢出了,怎么做%10...

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2010-11-26 09:15 |只看该作者
回复  hellioncu


    这么大的数早溢出了,怎么做%10...
论坛ID 发表于 2010-11-26 08:53



    所以我前面写了大数运算,要自己实现

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
8 [报告]
发表于 2010-11-26 09:19 |只看该作者
本帖最后由 ecjtubaowp 于 2010-11-26 12:40 编辑

回复 3# juffun
  1.    
  2. void div(int *a,int b,int *c)//a为输入数组,c为结果,这里b=10,a和c弄成字符串数组也行
  3. {  
  4.    int i,j,r,m;
  5.    m=0;  
  6.    for(i=1;i<=a[0];i++)//a[0]为二进制串的长度
  7.    { m=m*2+a[i];c[i]=m/b;m%=b;
  8.    }      
  9.    
  10.    j=a[0]+1; for(i=1;i<=a[0];i++)if(c[i]){j=i;break;}
  11.    c[0]=a[0]-j+1; for(i=1;i<=c[0];i++)c[i]=c[j++];
  12.    c[i] = m;//最后%10的余数存入数组C的最后一位
  13.    c[0]++;//最后结果的长度再加1
  14.    return ;      
  15. }   
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2010-11-26 09:21 |只看该作者
2进制存储转n进制字符串输出,跟硬件除法器很像了

论坛徽章:
0
10 [报告]
发表于 2010-11-26 09:50 |只看该作者
void div(int *a,int b,int *c)//c=a/b,这里b=10,a和c弄成字符串数组也行
{  
   int i,j,r,m;
   m=0;  
   for(i=1;i<=a[0];i++)//a[0]为二进制串的长度
   { m=m*2+a[i];c[i]=m/b;m%=b;
   }//        000 6*     12345/223
   // 223     123 45  
   j=a[0]+1; for(i=1;i<=a[0];i++)if(c[i]){j=i;break;}
   c[0]=a[0]-j+1; for(i=1;i<=c[0];i++)c[i]=c[j++];
   c[i] = m;
   return ;      
}   

    m=m*2 +a[i],要是二进制串很长的话,m是不是得溢出了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP