码迷,mamicode.com
首页 > 其他好文 > 详细

拼命拯救自己的ACM

时间:2017-02-21 22:10:08      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:eof   include   namespace   输出   span   ems   ++   algo   ios   

                                     ACM精度简单题   

                                          大数相加

描述

求两个不超过200位的非负整数的和。

输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

AC代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>

using namespace std;
#define MAX_LEN 200
int an1[MAX_LEN + 10];
int an2[MAX_LEN + 10];
char szLine1[MAX_LEN + 10];
char szLine2[MAX_LEN + 10];

int main()
{
    cin >> szLine1;
    cin >> szLine2;
    int i, j;
    memset(an1, 0, sizeof(an1));
    memset(an2, 0, sizeof(an2));
    int len1 = strlen(szLine1);
    int len2 = strlen(szLine2);
    int maxx = max(len1, len2) + 1;
    for (i = len1 - 1, j = 0; i >= 0; i--){
        an1[j++] = szLine1[i] - 0;
    }
    for (i = len2-1,j=0; i>=0 ; i--){
        an2[j++] = szLine2[i] - 0;
    }
    
    for (j = 0; j < maxx; j++){
        an1[j] += an2[j];
        if (an1[j] >= 10){
            an1[j] -= 10;
            an2[j + 1]++;
        }
    }

    for (i = maxx; (i >= 0) && (an1[i] == 0); i--);
    if (i >= 0)
        for (; i >= 0; i--)
            cout << an1[i];
    else cout << "0";

    
    return 0;
}

                                         

                                           大数乘法

算法思想:每个位相乘的结果放在一个位置上,错位叠加后,对于大于10的部分,十位加到前面,保留个位。

 

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<string>
 5 #include<cstring>
 6 #define MAX_LEN 200
 7 using namespace std;
 8 
 9 char s1[MAX_LEN + 10];
10 char s2[MAX_LEN + 10];
11 int an1[MAX_LEN + 10];
12 int an2[MAX_LEN + 10];
13 int ans[MAX_LEN * 2 + 10];
14 
15 int main()
16 {
17     cin >> s1;
18     cin >> s2;
19     memset(an1, 0, sizeof(an1));
20     memset(an2, 0, sizeof(an2));
21     memset(ans, 0, sizeof(ans));
22     int len1 = strlen(s1);
23     int len2 = strlen(s2);
24     int maxx = len1 + len2 + 1;
25     int i, j;
26     for (i = 0, j = len1 - 1; j>=0; j--){
27         an1[i++] = s1[j] - 0;
28     }
29     for (i = 0, j = len2 - 1; j >= 0; j--){
30         an2[i++] = s2[j] - 0;
31     }
32     for (i = 0; i < len2; i++){
33         for (j = 0; j < len1; j++){
34             ans[i + j] += an2[i] * an1[j];
35         }
36     }
37     for (i = 0; i < maxx; i++){
38         if (ans[i] >= 10){
39             ans[i + 1] += ans[i] / 10;
40             ans[i] %= 10;
41         }
42     }
43     for (i = maxx; (ans[i] == 0 && (i >= 0)); i--);
44         if (i >= 0)
45             for (; i >= 0; i--)
46                 cout << ans[i];
47         else
48             cout << "0";
49     return 0;
50 }

 

拼命拯救自己的ACM

标签:eof   include   namespace   输出   span   ems   ++   algo   ios   

原文地址:http://www.cnblogs.com/leonardju/p/6426230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!