zoukankan      html  css  js  c++  java
  • 洛谷 P1601 A+B Problem(高精)

    题目背景

    题目描述

    高精度加法,相当于a+b problem,不用考虑负数.

    输入格式

    分两行输入。a,b<=10^{500}a,b<=10500

    输出格式

    输出只有一行,代表a+ba+b的值

    代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<math.h>
     4 #include<algorithm>
     5 #include<cstring>
     6 using namespace std;
     7 
     8 struct gaojing
     9 {
    10     int n;
    11     unsigned int z[600]={0};
    12     char s[600];
    13 
    14     gaojing()
    15     {
    16         n=1;
    17         memset(s,0,sizeof(s));
    18     }
    19 
    20     void init()
    21     {
    22         scanf("%s",s);
    23 
    24         n=strlen(s);
    25 
    26         reverse(s,s+n);
    27 
    28         for(int i=0;i<n;i++)
    29         {
    30             z[i]=s[i]-'0';
    31         }
    32     }
    33 };
    34 
    35 
    36 gaojing c;
    37 
    38 gaojing operator+(const gaojing &a,const gaojing &b)
    39 {
    40     c.n=max(a.n,b.n);
    41 
    42     for(int i=0;i<c.n;i++)
    43     {
    44         c.z[i]=a.z[i]+b.z[i];
    45     }
    46 
    47     for(int i=0;i<c.n;i++)
    48     {
    49         c.z[i+1]+=c.z[i]/10;
    50         c.z[i]=c.z[i]%10;
    51     }
    52 
    53     if(c.z[c.n]!=0) c.n++; 
    54 }
    55 
    56 int main(void)
    57 {
    58     gaojing a,b;
    59     a.init();
    60     b.init();
    61     a+b;
    62 //    printf("%d %d %d
    ",a.n,b.n,c.n);
    63     if(c.z[c.n+1]!=0) c.n++;
    64     for(int i=c.n-1;i>=0;i--)
    65     {
    66         printf("%d",c.z[i]);
    67     }
    68     
    69     return 0;
    70 }

    这道题用的是另一种方法——结构体+重载运算符

    1.reserve函数:将元素变为倒序,相当于从字符串的len-1遍历到0,但后面仍需要再将它转换为int型

    2.重载运算符:将“+”定义新的运算方式,但只有在满足是gaojing与gaojing数据类型的相加才能使用这个重载后的“+”进行运算

    3.相加的运算次数需要根据a和b中最长数据来决定

    4.重载运算符的运算中,最后的进位需要进行特判,应该是c.z[c.n],而不是c.z[c.n+1],因为数据是从0到n-1的,直接判断从c.z[c.n]即可

    5.gaojing数据类型输入:使用在该结构体中的init函数进行输入

    6.输出直接使用c.z[i]遍历输出即可

     

  • 相关阅读:
    subString源码分析
    我的three.js学习记录(三)
    我的three.js学习记录(二)
    2017-10-15
    我的three.js学习记录(一)
    我的Spring学习记录(三)
    我的Spring学习记录(二)
    我的Hibernate学习记录(二)
    我的Hibernate学习记录(一)
    Tomcat学习笔记
  • 原文地址:https://www.cnblogs.com/jd1412/p/12457050.html
Copyright © 2011-2022 走看看