• 高精度加法


    1124: 高精度高精度加法

    题目描述

    输入两个正整数(最多100000位),输出它们的和。

    输入

    两行,两个整数。

    输出

    一行,一个整数

    样例输入

    999999999999999999999999999999999999999999999999999999

    12345678999999999999999999999999

    样例输出

    1000000000000000000000012345678999999999999999999999998

     

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 using namespace std;
     6 int main()
     7 {
     8     char y[100005],x[100005];             //存储字符串
     9     int s[100005],c[100005],ans[100005];
    10     int l,i,j,k,p,q,w,t,z = -1,o,u = -1;
    11     gets(y);
    12     gets(x);
    13     for(i = 0;i <= 100005;i++)
    14     {
    15         if(y[i] == '')
    16         {
    17             i = i - 1;
    18             break;
    19         }
    20     }                  //判断字符串长度
    21     for(t = i;t >= 0;t--)
    22     {
    23         z = z + 1;
    24         s[z] = y[t] - 48;
    25     }                     //把字符串转化为数组并且倒过来便于计算
    26     for(j = 0;j <= 100005;j++)
    27     {
    28         if(x[j] == '')
    29         {
    30             j = j - 1;
    31             break;
    32         }
    33     }                    //判断字符串长度
    34     for(o = j;o >= 0;o--)
    35     {
    36         u = u + 1;
    37         c[u] = x[o] - 48;     //把字符串转化为数组并且倒过来便于计算
    38     }
    39     if(i >= j)
    40     {
    41         for(k = 0;k <= i;k++)
    42         {
    43             ans[k] = c[k] + s[k] + ans[k];      //正常相加
    44             ans[k + 1] =ans[k] / 10;            //和超过10进位
    45             ans[k] = ans[k] % 10;    //保留下一位小数
    46         }
    47     }
    48     else         //循环次数不同,计算内容相同
    49     {
    50         for(k = 0;k <= j;k++)
    51         {
    52             ans[k] = c[k] + s[k] + ans[k];
    53             ans[k + 1] = ans[k] / 10;
    54             ans[k] = ans[k] % 10;
    55         }
    56     }
    57     if(i > j)
    58     {
    59         w = i + 1;
    60     }
    61     else
    62     w = j + 1;              //给结果前多加一位,防止前一位相加进十
    63     if(ans[w] == 0)
    64     {
    65         w = w - 1;        //如果前一位相加没有进十则直接忽略掉这一位
    66     }
    67     for(k = w;k >= 0;k--)
    68     {
    69         printf("%d",ans[k]);   //倒叙输出
    70     
    71     }
    72     return 0;
    73     
    74 }

    **高精度加法,就是模拟竖式。1.把字符串转化为数组,并且转化成计算用的数组顺序。

    2.把数组相加,大于十进位。

    3.最后倒叙输出数字。

  • 相关阅读:
    css3 省略号
    js一些常用方法
    nth-child使用
    常见表单元素处理
    表单的基本使用
    web基本概念
    PHP数组
    PHP函数
    PHP错误处理
    PHP文件载入
  • 原文地址:https://www.cnblogs.com/rax-/p/8526215.html
Copyright © 2020-2023  润新知