高精度算法--个人笔记

#include <iostream>
#include<string.h>
#include<stdio.h>

#if 0
高精度算法:
对于超限数据的计算,加减乘除,利用竖式计算
用字符串保存数据,然后将其保存在数组中,逆序保存,计算即可,遇到进位就加,借位就减

#endif

int main()
{
    const int len = 101;
    //101位数据
    //两个数组保存数据
    char a[len], b[len];
    printf("-------请输入两个数\n");
    scanf("%s%s", a, b);

    //接下来是将字符串循环输入数组中,使用动态分配
    int a_1 = strlen(a);
    int b_1 = strlen(b);

    char* a1 = (char*)malloc(a_1 * sizeof(char));//a1数组
    char* b1 = (char*)malloc(b_1 * sizeof(char));

    for (int i = 0; i < a_1; i++)
    {
        a1[i] = a[a_1- 1 - i] - '0';
        printf("-%d  ", a1[i]);
    }
        
    for (int i = 0; i < b_1; i++) b1[i] = b[b_1- 1 - i] - '0';

    //逆序保存完成

    int x = 0, len_ = 0;

    //保存收集写完的数据
    char* p = NULL;
    if (a_1 < b_1)    p = (char*)malloc(b_1 * sizeof(char));
    else   p = (char*)malloc(a_1 * sizeof(char));

    while (len_ <= a_1 || len_ <= b_1)
    {
        p[len_] = a1[len_] + b1[len_] + x;//两个数据相加,再加进位
        printf("%d  ", p[len_]);
        x = p[len_] / 10;//进位
        p[len_] = p[len_] % 10;//满十进位,保留个位
        len_++;//完成继续下一位
    }

   // int len_m = _msize(p);
    for (int i = 0; i < _msize(p); i++)
        printf("%d", p[_msize(p)- 1 - i]);

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值