| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3342 人关注过本帖
标题:一个大整数加法的问题。
取消只看楼主 加入收藏
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:2 
一个大整数加法的问题。
大的整数加法(大于24位,小于100位)。
函数原型为 void H_interger(char *s1,char *s2)
要求输出计算结果:
比如:
111111111111111111111+1234567891234567891234=13456789002345679002345

我编写的时候主要遇到两个困难:
1.字符型转长整形
2.进位的问题(主要是不进位但是结果全为9的问题)
字符型转整形解决了:
程序代码:
void addlong(char*str1, char* str2)//下面的代码主要分割字符成,每8位转成为一个整形存在二维数组中
{
    int q[2],r[2],i,j,k; //q存储商,r存储余数
    int tp1, tp2;
    long a[2][13] = {0};//用来存储分割结果
    char ts[9],*s1;
    i = strlen(str1); j = strlen(str2);
    printf("i=%d, j=%d\n", i, j);
    q[0] = i / 8; q[1] = j / 8;
    r[0] = i % 8; r[1] = j % 8;
    for (k = 0; k < 2; k++)
    {
        if (k == 0) s1 = str1;
        else s1 = str2;
        for (tp1 = 0; tp1 < r[k]; tp1++)
        {
            ts[tp1] = *(s1 + tp1);
        }
        ts[r[k]] = '\0';
       

        a[k][0] = atol(ts);
        for (tp1 = 0; tp1 < q[k]; tp1++)
        {
            for (tp2 = 0; tp2 < 8; tp2++)
                ts[tp2] = *(s1 + r[k] + tp1 * 8 + tp2);
            ts[8] = '\0';
            a[k][tp1+1] = atol(ts);
        }
    }
    for (tp1 = 0; tp1 < 2; tp1++) //输出分割结果
    {
        for (tp2 = 0; tp2 < 13; tp2++)
        {
            if (a[tp1][tp2] == 0) break;
            printf("%d\n", a[tp1][tp2]);
        }
    }

}
但是最后处理,不同位数的整数的进位的问题,不会做了,求各位网友帮帮忙!



[此贴子已经被作者于2016-9-20 14:49编辑过]

2016-09-20 14:48
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:0 
回复 5楼 吹水佬
这个思路整体上还是楼上的按位加的思路。

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2016-09-21 16:48
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:0 
回复 4楼 ehszt
嗯 ,按位加可以免去二次进位的尴尬,我最终也是按照这个算法解决的,谢谢你啊!

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2016-09-21 16:49
快速回复:一个大整数加法的问题。
数据加载中...
 
   



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

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