zoukankan      html  css  js  c++  java
  • 题解-洛谷P1601 A+B Problem(高精)

    https://www.luogu.org/problemnew/show/P1601(题目传送)

    显然数据范围超过了long long类型,故不能简单的用两个长整型存起来相加。这里用到大数据的高精度算法(加法)。

    所谓高精度算法,就是先用字符串将输入存下,并把字符串倒序(方便之后处理)转换成数组,并依据小学竖式的算法思想,逐位处理计算结果(而这里高精度加法的核心就是进位)。

    上代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int a[502],b[502],c[502];
     6 int main()
     7 {
     8     char s1[501],s2[501];
     9     cin>>s1>>s2;
    10     for(int i=strlen(s1)-1;i>=0;i--)
    11         a[strlen(s1)-i]=s1[i]-'0';
    12     for(int i=strlen(s2)-1;i>=0;i--)
    13         b[strlen(s2)-i]=s2[i]-'0';
    14     int i=1;
    15     while(i<=strlen(s1)||i<=strlen(s2))
    16     {
    17         c[i]+=a[i]+b[i];
    18         if(c[i]>=10)
    19         {
    20             c[i+1]++;
    21             c[i]%=10;
    22         }
    23         i++;
    24     }
    25     while(!c[i]&&i>1) i--;
    26     for(;i>=1;i--)
    27     cout<<c[i];
    28     return 0;
    29 } 

    最后几点提醒:

    1.储存结果的数组c中开头的0不输出;若c中全是零,即两数之和为0,就只保留最后一位0输出。

    2.若输入的数据中有负数,就要进行特判,并视情况转化为相应的高精度减法计算。

    3.输出判断时应从两个加数最高位+1开始(防止加数最高位有进位但被忽略)。

  • 相关阅读:
    Missing Number
    python乱码,讲得比较好,
    公司搬家,拿了个费机器,没root密码,又忘了怎么搞了,
    mylyn
    eclipse shortcut binding
    jdk8 eclipse luna market crashed
    openjdk
    download plugin update site for offline installation
    armstrong's programming erlang 2nd
    sdf SimpleDateFormat 不是线程安全的,
  • 原文地址:https://www.cnblogs.com/InductiveSorting-QYF/p/10464393.html
Copyright © 2011-2022 走看看