zoukankan      html  css  js  c++  java
  • 十进制大数的加法运算

    输入文件的第一行为一个整数N,表示输入文件中接下来有N组数据,没组数据最多包含100行,每行有一个非常长的十进制整数组成,这个整数的长度不会超过100个字符,而且只包含数字,每组数据的最后一行为0,表示这组数据结束。

    对输入文件的每组数据,输出他们的和。

    此题不同于两大数相加,是多个大数相加的问题,在求和时,有其独到之处:竖式加法

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    const int M=200;
    using namespace std;
    int main(){
        char buffer[M];
        int array[M][M],answer[M];
        int N,maxn,len,num_integers,carry,sum,digit,l;
        while(cin>>N){
            for(int k=1;k<=N;k++){
            maxn=-1;
            memset(array,0,sizeof(array));
            memset(answer,0,sizeof(answer));
            for(num_integers=0;num_integers<100;num_integers++ ){
                gets(buffer);
                if(strcmp(buffer,"0")==0) break;
                len=strlen(buffer);
                if(len>maxn)
                    maxn=len;
                for(int j=len-1,m=0;j>=0;j--)
                    array[num_integers][m++]=buffer[j]-'0';
            }
            carry=0;
            for(int i=0;i<maxn+2;i++){
                sum=carry;
                for(int j=0;j<num_integers;j++){
                    sum+=array[j][i];
                    digit=sum%10;
                    carry=sum/10;
                    answer[i]=digit;
                }
            }
            for(l=maxn+2;l>=0;l--)
                if(answer[l]!=0)
                    break;
            while(l>=0){
                cout<<answer[l--];
            }
            cout<<endl;
         }
        }
        return 0;
    }
  • 相关阅读:
    重建Exchange邮件系统的系统邮箱
    枚举算法001
    关于网站备案的44个问题
    wireshack使用
    格言
    程序员遇到BUG的解释
    只要有信心任何事情都可以做成,今天表现不错哦,加油!
    踏实,自信
    学会经营自己的关系
    戒酒
  • 原文地址:https://www.cnblogs.com/wintersong/p/4946974.html
Copyright © 2011-2022 走看看