高精度加法

来源:互联网 发布:纬德软件下载 编辑:程序博客网 时间:2024/06/05 21:59

在NOI和NOIP的赛场上,int float long long char 帮助我们拿下一题又一题,但是,如果有一天,连long long 和 int64都不能满足题目的要求,我们又怎么能让可爱的分数就这样离我们远去呢?我们需要动脑筋,把学过的东西综合起来,活学活用。
高精度,就是用数组来作小学的竖式,考虑进位,转换等一系列要素后输出。数组有多少元素,答案就能有多少位。

#include <stdio.h>#include <math.h>#include <string.h>char a[1001],b[1001];char number1[1001],number2[1001];int sum[1005]={0};int  main(){    int bbb;    scanf("%s%s",a,b);    int lena=strlen(a),lenb=strlen(b),big;    int x=0;    int i,j;    if(lena>=lenb)big=lena;    else big=lenb;    for(i=0;i<=big+1;i++){        number1[i]='0';//初始化        number2[i]='0';//初始化    }    for(i=lena,j=0;i>=1;i--)        number1[i]=a[j++];    for(i=lenb,j=0;i>=1;i--)        number2[i]=b[j++];        //////整个高精度加法的精髓//////    for(i=1;i<=big+1;i++){        bbb=number1[i]+number2[i]-'0'-'0';//转换环节,很重要        sum[i]=bbb;        sum[i]+=x;        if(sum[i]>=10){            x=1;            sum[i]-=10;        }        else            x=0;    }    if(sum[big+1]>0)big++;        //////整个高精度加法的精髓//////    for(i=big;i>=1;i--)//逆序输出        printf("%d",sum[i]);    return 0;}

我们定义了a和b两个字符数组,用于输入,之后的number1和number2是用来转换与计算的,直接使用a,b进行运算会导致错误
先把数组倒置,各个元素转换相加后,再逆序输出,高精度加法就完成了。

0 0
原创粉丝点击