zoukankan      html  css  js  c++  java
  • SDNU 1303.A+B(高精度)

    本题非常非常的数有可能非常大,用常规的高精度无法解决,应用字符类型高精度来解决

    Description

    求A+B

    Input

    多组测试样例。两个正整数X,Y(0≤X,Y≤10^100)

    Output

    输出结果

    Sample Input

    1 1
    12345 54321
    

    Sample Output

    2
    66666
    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char ads[105];
    char s1[105],s2[105];
    int additive(char* a,char* b)
    {
        memset(ads,0,sizeof(ads));
        int len,len1,len2;
        int i;
        int ad[105];
        len1=strlen(a);
        len2=strlen(b);
        if(len1==len2)
        {
            len=len1;
        }
        else if(len1>len2)//短的数字位不足。将数字往后移,前面补“0”,便于计算
        {
            len=len1;
            for(i=len; i>=len-len2; i--)
            {
                b[i]=b[i-len+len2];
            }
            for(i=len-len2-1; i>=0; i--)
            {
                b[i]='0';
            }
        }
        else if(len1<len2)//短的数字位不足。将数字往后移,前面补“0”,便于计算
        {
            len=len2;
            for(i=len; i>=len-len1; i--)
            {
                a[i]=a[i-len+len1];
            }
            for(i=len-len1-1; i>=0; i--)
            {
                a[i]='0';
            }
        }
        int t=0;
        for(i=len-1; i>=0; i--)//进行计算
        {
            ad[i]=(a[i]-'0')+(b[i]-'0')+t;//把原本该有的数加上,再加上前一位需要进的“1”
            t=0;
            if(ad[i]>=10)
            {
                t++;
                ad[i]=ad[i]-10;
                ads[i]=ad[i]+'0';
            }
            else
            {
                ads[i]=ad[i]+'0';
            }
        }
        if(t==1)//如果位数已经变大,就将所有数往后移,再在最前面加一
        {
            for(i=len; i>=0; i--)
            {
                ads[i]=ads[i-1];
            }
            ads[0]='1';
        }
        return 0;
    }
    int main()
    {
        while(scanf("%s",s1)!=EOF)
        {
            scanf("%s",s2);
            additive(s1,s2);
            cout<<ads<<endl;
        }
        return 0;
    }
  • 相关阅读:
    测试72.思维好题
    pbds:STL平衡树
    测试69。这场因为轻视少了很多分。
    C++ 中的四种类型转换
    C++ 中的static关键字
    codeforces 1269 E K Integers
    P4556 [Vani有约会]雨天的尾巴 (线段树合并)
    P3521 [POI2011]ROT-Tree Rotations (线段树合并)
    codeforces 600E E. Lomsat gelral (线段树合并)
    线段树合并的一些题
  • 原文地址:https://www.cnblogs.com/RootVount/p/10356761.html
Copyright © 2011-2022 走看看