• Integer Inquiry -TJU1112


    作为最简单的高精度加法,要注意的是如下几点,

    第一,因为是数位达到上百位的大数,所以只能用字符串数组来存贮。

    第二,为了方便之后的相加操作,应该把字符串数组逆序转化为一个整型数组。

    第三,在控制进位的时候,应该用一个工具变量,假设为h,则h初始值为0.之后在循环体里h是等于对应位的两个数相加之后/10,使得下一次循环时,高位可以进位。

    第四,因为已经把原来读取的大数用字符数组读入后又逆序复制到一个新的整型数组里,所以此时下标小的保存的就是低位,这个时候再控制循环变量从低位一直加到高位,
    多余的位都是0,但是没关系,继续相加(如果不这样的话,最大的那一位可能会出现无法进位的情况,即读入的数是多少位,最后结果就是多少
    位,显然是错误的)。。。

    第五。在相加的时候,可以不必一位一位相加,可以4位4位相加,即万进制加法,其实万进制是很方便的一个方法,之后还会用万进制乘法,在节省时间方面是很有用的。
    下面是AC代码,还是采用一位一位相加,采用的基本上是上述思想
    注意此题输入结束标志:输入的那一行有且只有一个0结束,不是输入的第一个字符为0为结束标志,我原先判断结束的标志是当输入的一行字符串中第一个为0时程序结束,为此WA了好几次,在不是结束行中有可能会出现第一个字符为0.故判断结束时不能单单判断第一个字符是否为0,而应进一步说明那一行只有一个字符并接为0;

    #include <iostream>  
    #include<cstring>
    #include <cstdio>  
    using namespace std;  
    int a[1000]={0},b[205]={0};  
    char str[205];  
    int main()  
    {  
        int len1;  
        int j,i;  
        gets(str);  
        int len=strlen(str);  
        for(i=0,j=len-1;j>=0;j--,i++)  
            b[i]=str[j]-'0';  
        while(1)  
        {  
            if(str[0]=='0'&&str[1]=='')//注意判断结束的标志  
                break;  
            int h=0;  
            int m;  
              
            for(j=0;j<len;j++)  
            {  
                m=a[j]+b[j]+h;  
                a[j]=m%10;  
                h=m/10;               
            }  
            while(h)  
            {  
                a[j]=h%10;  
                len++;  
                h/=10;  
            }  
            gets(str);  
            len1=strlen(str);  
            for(i=0,j=len1-1;j>=0;j--,i++)  
                b[i]=str[j]-'0';           
        }  
        int p;  
        for(p=len-1;p>=0;p--)  
            cout<<a[p];  
        cout<<endl;  
        return 0;       
    } 
    #include<iostream>
    #include<cstring>
    using namespace std;
    #define N 110
    int main()
    {    
            int sum[N]={0};        
            char str[N];
            while(cin>>str)
           {
                if(str[0]=='0'&&str[1]=='')//注意判断结束的标志  
                break;  
                 int num[N]={0};
              int len=strlen(str);
              for(int i=0;i<len;i++)
                   num[i]=str[len-1-i]-'0';
              for(int i=0;i<N;i++)
              {
                  sum[i]+=num[i];
                  if(sum[i]>9)
                  {
                     sum[i]-=10;
                   sum[i+1]+=1;    
                }
                //sum[i+1]+=(sum[i]+num[i])/10;
                //sum[i]=(sum[i]+num[i])%10;
              }
            }
            int k=N-1;
            while(sum[k]==0) k--;
            if(k<0) 
              cout<<0;
            else 
              for(;k>=0;k--)
                  cout<<sum[k];
            cout<<endl;
        return 0;
    }


    C++代码 :

    WA 好几次  没有这条语句的后半部分 if(str[0]=='0'&&str[1]==''),即str[1]=='' 一直WA 很苦闷  别的OJ 能通过去的   附代码(AC)

  • 相关阅读:
    000-ESP32学习开发(SDK)-ESP32开发板使用说明
    2-STM32 替换说明-CKS32, HK32, MM32, APM32, CH32, GD32, BLM32, AT32(推荐), N32, HC华大系列
    002-CH579M学习开发-官方资料学习说明,开发板蓝牙(蓝牙定位),网口通信测试
    001-CH579M学习开发-硬件使用说明,下载和运行第一个程序
    STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-硬件使用说明
    17-网络芯片CH395Q学习开发-片内EEPROM读写实验
    16-网络芯片CH395Q学习开发-低功耗实验
    15-网络芯片CH395Q学习开发-DNS 域名解析
    14-1-网络芯片CH395Q学习开发-WEB服务器-网页到底是啥, web服务器是啥, 网页如何显示的显示图片和视频
    13-网络芯片CH395Q学习开发-模块使用Socket0作为MAC RAW
  • 原文地址:https://www.cnblogs.com/wft1990/p/5861278.html
Copyright © 2020-2023  润新知