• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
scorpiorax
博客园    首页    新随笔    联系   管理    订阅  订阅
高精度加法

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] == '\0')
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] == '\0')
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.最后倒叙输出数字。

posted on 2018-03-08 00:43  scorpiorax  阅读(367)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3