A + B Problem II(高精度加法)

来源:互联网 发布:五行量化指标源码 编辑:程序博客网 时间:2024/05/20 09:21
#include <stdio.h>#include <string.h>int main(){    int lenmax,la,lb,k,i,n,len,lenmin,l=1;    char a[1000];    char b[1000];    char sum[1000];    char ch;    scanf("%d",&n);    getchar();    while(n--)    {        scanf("%s",&a);        scanf("%s",&b);//输入a和b//奥注意输入时y        la=strlen(a)-1;        lb=strlen(b)-1;        lenmax=(la>lb?la:lb);        lenmin=(la<lb)?la:lb;        for(i=0;i<=lenmax+1;i++)//将0位置留出来,防止越位,一共len+1位            sum[i]='0';        //开始计算        //计算分2类,一类la==lb,二类la>lb或la<lb        for(i=lenmax+1;lenmin!=-1;i--)//写相同的部分,从后往前,要防止进位        {            if(sum[i]+a[la]+b[lb]>=154)//154是三个数加起来等于10时的ascll的和,如1+4+5=49+52+53=154            {                sum[i]=sum[i]+a[la--]+b[lb--]-106;//106是通过1+9+1-10=1=49=(49+57+49)-106                sum[i-1]='1';            }            else            {                sum[i]=a[la--]+b[lb--]+sum[i]-96;                }            lenmin--;        }        /*以上为两个数字相同的末位,下面开始讨论如果有剩余*/        if(la<0)        {            for(k=i;k>=1;k--)            {                if(sum[k]+b[lb]>=106)                {                    sum[k]=sum[k]+b[lb--]-58;//1+9=10=49+57-58=48                    sum[k-1]='1';                }                else                {                    sum[k]=b[lb--]+sum[k]-48;//1+0-x=1=49+48-48=49                }            }        }        else        {            for(k=i;k>=1;k--)            {                if(sum[k]+a[la]>=106)                {                    sum[k]=sum[k]+a[la--]-58;//1+9=10=49+57-58=48                    sum[k-1]='1';                }                else                {                    sum[k]=a[la--]+sum[k]-48;                }            }        }        //打印sum数组        printf("Case %d:\n%s + %s = ",l,a,b);        if(sum[0]>'0'&&sum[0]<='9')        {            printf("%c",sum[0]);        }        for(k=1;k<=lenmax+1;k++)            printf("%c",sum[k]);        printf("\n");        l++;        if(n)printf("\n");    }    return 0; }

做了,好久,昨天晚上8.00钟写,写到9.30,刮大风,下雨了,我打着雨伞,走在雨中。我们这边,旁边的城市,刮起了龙卷风,还下了冰雹,死了98人,伤是500多人,厄尔尼诺现象,室友说这和七月下雪,是一样的;

然后,今天从上午,10.00左右,写,写了一遍,然后出错,调了好久,一直是错,干脆,就睡了一觉,重新写了一遍,吃饭去

java


import java.util.Scanner;import java.math.BigInteger;public class Main {      public static void main(String []args){        BigInteger a,b;        int T;        Scanner input=new Scanner(System.in);        T=input.nextInt();        for(int i=1;i<=T;i++){            a=input.nextBigInteger();            b=input.nextBigInteger();            System.out.println("Case"+" "+i+":");            System.out.println(a+" + "+b+" = "+a.add(b));        }           }} 
0 0
原创粉丝点击