• wiki oi 3116 高精度练习之加法


    题目描述 Description

    给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。

    输入描述 Input Description

    读入两个用空格隔开的正整数

    输出描述 Output Description

    输出A+B的值

    样例输入 Sample Input

    3 12

    样例输出 Sample Output

    15

    数据范围及提示 Data Size & Hint

    两个正整数的位数不超过500位

    分析:和减法一样,去掉了两个数的大小比较,发现没必要,还有发现不用判断cc大于10么, 直接cc%=10;

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 char a[501],b[501];
     8 int c[502];
     9 int main()
    10 {
    11     cin>>a>>b;
    12     memset(c,0,sizeof(c));
    13     int alen=strlen(a);
    14     int blen=strlen(b);
    15     int i=alen-1,j=blen-1,k=0;
    16     int carry=0;
    17     while(i>=0&&j>=0)
    18     {
    19         int cc=(a[i--]-'0')+(b[j--]-'0')+carry;
    20         carry=cc/10;
    21         cc%=10;
    22         c[k++]=cc;
    23     }
    24     while(i>=0)
    25     {
    26         int cc=(a[i--]-'0')+carry;
    27         carry=cc/10;
    28         cc%=10;
    29         c[k++]=cc;
    30     }
    31     while(j>=0)
    32     {
    33         int cc=(b[j--]-'0')+carry;
    34         carry=cc/10;
    35         cc%=10;
    36         c[k++]=cc;
    37     }
    38     if(carry!=0)c[k++]=carry;//最后判断进位是不是为0不是要进一位 避免23+99=22;
    39     int last=k;
    40     for(int l=k; l>=0; l--)//找开头不是0的那个起点
    41         if(c[l]!=0)
    42         {
    43             last=l;
    44             break;
    45         }
    46     for(int l=last; l>=0; l--)printf("%d",c[l]);
    47     printf("
    ");
    48     return 0;
    49 }
    随便写写。一点学习心得。。。--如果本文章没有注明转载则为原创文章,可以随意复制发表,但请注明出处与作者
  • 相关阅读:
    lodash kebabCase
    lodash escapeRegExp 转义正则特殊字符
    lodash capitalize 首字母大写
    lodash camelCase 驼峰写法
    lodash pick
    lodash random
    lodash round
    Linux 目录结构
    每天一个linux命令(6/18):lsof命令
    Linux 内核编译步骤及配置详解
  • 原文地址:https://www.cnblogs.com/ganhang-acm/p/4189472.html
Copyright © 2020-2023  润新知