栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言练习题——超大数相加

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言练习题——超大数相加

超大数的加法

求两个超级大的整数的和。

//超大数的加法
#include 

int main()
{
    //定义两个超大数
    char str_num1[] = "187356192873256918723591873264981267345981243756198234759178378256989168745616";
    char str_num2[] = "21384619376598174356198734519263539284510874356";
    //求两个超大数的长度
    int str_num1_len = sizeof(str_num1) - 1;
    int str_num2_len = sizeof(str_num2) - 1;
    //交换,将较长的数作为str_num1,较短的数作为str_num2
    if(str_num1_len < str_num2_len)
    {
        int tmp = str_num1_len;
        str_num1_len = str_num2_len;
        str_num2_len = tmp;
//      char tmp_arry[] = {0};
//      tmp+arry = str_num1;
//      str_num1 = str_num2;
//      str_num2 = tmp_arry;
    }
    //定义一个变量,作为进位标志
    int jinwei = 0;
    //循环从最低位开始相加
    for(int i = str_num1_len - 1; i >= 0; i--)
    {
        //如果较短的数已经相加完了,则通过是否需要进位判断较长的数是否需要进位
        if(str_num1_len - i >= sizeof(str_num2))
        {
            //直到不需要进位时,退出循环
            while(jinwei != 0)
            {
                str_num1[i] = str_num1[i] - '0' + jinwei;
                jinwei = str_num1[i] / 10;
                str_num1[i] = str_num1[i] % 10 + '0';
                i--;
            }
            break;
        }
        //两个数的各个位数相加
        int sum = (str_num1[i] - '0') + (str_num2[str_num2_len - 1] - '0') + jinwei;
        //进位
        jinwei = sum / 10;
        //将相加后的个位数赋值给str_num1的对应位
        str_num1[i] = sum % 10 + '0';
//      printf("str_num1[%d] = %d,str_num2[%d] = %dn",i,str_num1[i] - '0',str_num2_len - 1,str_num2[str_num2_len - 1] - '0');
        str_num2_len--;
    }
    //输出结果
    printf("%s,%ldn",str_num1,sizeof(str_num1));
    return 0;
}

程序运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954627.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号