HDU:Integer Inquiry

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define N 105
int a[N];
int main()
{
    int i,j,n,n1,flag;
    char ch[N];
    scanf("%d",&n);
    while(n--)
    {        
        memset(a,0,sizeof(a));      //数组初始化为零
        while(scanf("%s",ch),ch[0]!='0')     //输入零结束
        {
            n1=strlen(ch);
            for(i=n1-1,j=0;i>=0;i--)
            {
                a[j++]+=ch[i]-'0';         
                a[j]+=a[j-1]/10;         //进位
                a[j-1]%=10;              //取余
            }
        }
        flag=0;
        for(i=N-1;i>0;i--)
        {
            if(flag)
                printf("%d",a[i]);
            else if(a[i])
            {
                printf("%d",a[i]);
                flag=1;
            }
        }
        printf("%d
",a[0]);         //输入0时应输出0,错了n多次
        if(n)                    //输出块之间有空行
            printf("
");
    }
    return 0;
}

 改版 为什么一直WA

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define N 105
int a[N],b[N];
int main()
{
    int i,j,n,n1,flag;
    char ch[N];
    scanf("%d",&n);
    while(n--)
    {        
        memset(a,0,sizeof(a));      //数组初始化为零
        while(scanf("%s",ch),ch[0]!='0')     //输入零结束
        {
            n1=strlen(ch);
            memset(b,0,sizeof(b));  
            for(i=0,j=n1-1;j>=0;j--,i++)
                  b[i]=ch[j]-'0';
            int h=0;
            int m;
            for(i=0;i<n1;i++)
            {
                m=a[i]+b[i]+h;
                a[i]=m%10;
                h=m/10; 
            }
            while(h)
            {
                a[i]=h%10;
                n1++;
                h=h/10; 
            }
        }
        flag=0;
        for(i=N-1;i>0;i--)
        {
            if(flag)
                printf("%d",a[i]);
            else if(a[i])
            {
                printf("%d",a[i]);
                flag=1;
            }
        }
        printf("%d
",a[0]);         //输入0时应输出0,错了n多次
        if(n)                    //输出块之间有空行
            printf("
");
    }
    return 0;
}
View Code

 C++版本

#include<iostream>
#include<cstring>
using namespace std;
#define N 110
int main()
{	
	int t;
	cin>>t;
	while(t--)
	{
		int sum[N]={0};
		
		char str[N];
		while(cin>>str&&str[0]!='0')
	   {
	   	  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;
		if(t)
		   cout<<endl;	
	}

	return 0;
}
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;
const int N=105;
int main()
{
    int a[N],b[N],c,d,ou,kl;
    string s1,s2;
    getline(cin,s1);
    c=s1.length();
    ou=0;
    for (int i=0;i<N;i++)//把s1h装到a[100]里
    {
        a[N-1-i]=s1[c-1-i]-'0';
        if(c-1-i<0)
        {
            a[N-1-i]=0;
        }
    }
    while(getline(cin,s2)&&s2!="0")
    {
        d=s2.length();
        for (int k=0;k<N;k++)//把s2装到b[100]里
        {
            b[N-1-k]=s2[d-1-k]-'0';
            if(d-1-k<0)
            {
                b[N-1-k]=0;
            }
        }
        for (int l=N-1;l>0;l--)//做加法
        {
            a[l]+=b[l];
            if(a[l]>=10)
            {
                a[l]-=10;
                a[l-1]++;
            }
        }
    }
    for (int g=0;g<N;g++)//从不为零的位置开始输出到最后一位
    {
        ou+=a[g];
        if(ou!=0)
            cout<<a[g];
    }
    cout<<endl;


    return 0;
}
原文地址:https://www.cnblogs.com/wft1990/p/5864025.html