| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 631 人关注过本帖
标题:超过四十位的的加减乘除,怎么写
只看楼主 加入收藏
木公12
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-11-20
收藏
 问题点数:0 回复次数:5 
超过四十位的的加减乘除,怎么写
题目描述
给定2个正整数a,b,a和b最多可能有40位,求出a+b的和

输入
两个正整数a,b,a和b最多可能有40位,一行表示一个数

输出
a+b的和

样例输入
1111111111111111111111111111111111111111111111111111111111111111111

2222222222222222222222222222222222222222222222222222222222222222222

样例输出
3333333333333333333333333333333333333333333333333333333333333333333
搜索更多相关主题的帖子: 正整数 
2014-11-20 16:52
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:0 
用数组来存储吧,然后加减乘除按照最初学加减乘除时的那些方式来计算,仅提供一个想法
2014-11-20 17:18
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:0 
高精度浮点数运算 http://blog.
也许对你有帮助
2014-11-20 23:14
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
https://

我喜欢这个
2014-11-21 11:34
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

int
main ( void )
{
    char a[41],b[41];    //两个40位正整数
    char sum[42] ;        //两数之合
    int carry = 0 ;        //进位标志
    char *max, *min ;
    int temp, len_max, len_min ; //中间变量
    /*
    **输入两个正整数
    */
    printf ( "输入整数A(最大40位):" ) ;
    scanf ( "%40[0123456789]", a ) ;
    setbuf ( stdin, NULL ) ;    //清空键盘缓冲区
    printf ( "输入整数B(最大40位):" ) ;
    scanf ( "%40[0123456789]", b ) ;
    /*
    **获取两个整数长度以便对齐进行加法运算
    */
    max = strlen ( a ) >= strlen ( b ) ? a : b ;
    min = strlen ( a ) < strlen ( b ) ? a : b ;
    len_max = strlen ( max ) ;
    len_min = strlen ( min ) ;
    /*
    **和的最后面首先加上字符结束标志
    */
    sum[ len_max + 1 ] = '\0' ;

    /*
    **从低位进行加法,并逐个复制到和字符串里
    */
    while ( --len_max >= 0 ) {
        temp = * ( max + len_max ) + carry - '0' ;
        if ( --len_min >= 0 ) {
            temp += * ( min + len_min ) - '0' ;
        }
        if ( temp > 9 ) {
            carry = 1 ;
            temp -= 10 ;
        }
        else {
            carry = 0 ;
        }
        sum[ len_max + 1 ] = temp + '0' ;
    }    

    if ( carry == 0 ) {
        /*
        **sum[0]位置如果没有进位,可以简单的给它设置成空格
        **sum[0] = ' ' ;
        **我这里为了演示效果,所以将数组往左移了一位
        */
        temp = 0 ;
        while ( (sum[temp] = sum[temp+1]) != '\0' ) {
            temp++;
        }
    }
    else {
        /*
        **如果有进位当然就是设置成“1”了
        */
        sum[0] = '1' ;
    }
    printf ( "A:%d位,B:%d位,SUM:%d位\n", strlen ( a ), strlen ( b ), strlen ( sum ) ) ;
    puts ( sum ) ;
    return 0 ;
}



[ 本帖最后由 yahwei 于 2014-11-21 12:46 编辑 ]

[qq]949654600[/qq]
2014-11-21 12:30
学海无涯书店
Rank: 2
等 级:论坛游民
帖 子:6
专家分:16
注 册:2014-11-20
收藏
得分:0 
楼主,只要你能定义出这样的数据类型,就可以 不过个人觉得这种程序没意义
2014-11-21 12:49
快速回复:超过四十位的的加减乘除,怎么写
数据加载中...
 
   



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

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