ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1601 A+B Problem(高精)

2021-04-09 23:02:47  阅读:193  来源: 互联网

标签:temp int char length 高精 进位 P1601 Problem 500


吐槽

自己亲手做出来最难的模拟题,花费了好久。

分析

10500大小的数据,肯定不能用正常的数据,因此只能用数组来存放每一位数字。

接着是将数据位数对齐,对于位数小的,前面补零(位数相同直接加)

然后相加就ok

最最最难得就是相加部分(从后往前加)

先考虑进位问题。设置标志判断是否进位,当下一位之和大于9(一定是9!!!)时,标志设true,否则设false。

然后根据标志判断是否当前数加一

还有容易忽视的就是,当轮到首位,又要进位时,直接输出1。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char a[500],b[500];
 4 int ans[500]={0};
 5 void add(char *a,char *b,int length){
 6     bool flag=false;
 7     for(int i=length-1;i>=0;i--){
 8         int temp=(int)(a[i]-'0')+(int)(b[i]-'0');
 9         if(flag){
10             temp++;
11         }
12         if(i==0&&temp>9){
13             cout<<1;
14         }
15         if(temp<10){
16             ans[i]=temp;
17             flag=false;
18         }else{
19             ans[i]=temp%10;
20             flag=true;
21         }
22     }
23     for(int i=0;i<length;i++){
24         cout<<ans[i];
25     }
26 }
27 int main()
28 {
29     cin>>a;
30     cin>>b;
31     int a_length=strlen(a),b_length=strlen(b);
32     char min_char=a_length<b_length?'a':'b';
33     int d=abs(a_length-b_length);
34     if(d==0){
35         add(a,b,a_length);
36         return 0;
37     }
38     if(min_char=='a'){
39         char plus[500];
40         for(int i=0;i<b_length;i++){
41             if(i<d){
42                 plus[i]='0';
43             }
44             else{
45                 plus[i]=a[i-d];
46             }
47         }
48         add(plus,b,b_length);
49     }
50     else{
51         char plus[500];
52         for(int i=0;i<a_length;i++){
53             if(i<d){
54                 plus[i]='0';
55             }
56             else{
57                 plus[i]=b[i-d];
58             }
59         }
60         add(plus,a,a_length);
61     }
62     return 0;
63 }

 

标签:temp,int,char,length,高精,进位,P1601,Problem,500
来源: https://www.cnblogs.com/lvjt0208/p/14639185.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有