各位脱发友们:
在这里发表一个令我这个新手抓发的题目,虽然解出来但没有成就感的题目。
大数是算法语言中数据类型无法表示的数,所以处理大数问题时首先要考虑怎样存储大数。
一般情况下大数是采用数组来存储。例如:

     下标0位置存储大数的低位,还需要一个整数记录大数有多少位,即length。可以考虑这样的结构(顺序表):

#define Maxsize 100
typedef struct list {
int data[Maxsize];
int length;
} SeqList;

A+B
有一个非常简单的问题给你,给你两个整数A和B,你的任务是计算A+B。
输入:输入的第一行包含一个整数T(T<=20)表示测试实例的个数,然后2*T行,分别表示A和B两个正整数。注意整数非常大,那意味着你不能用32位整数来处理。你可以确定的是整数的长度不超过1000。
输出:对于每一个样例,你应该输出两行,第一行是"Case #:",#表示第几个样例,第二行是一个等式"A+B=Sum",Sum表示A+B的结果。注意等式中有空格。

输入样例:
2
1
2
112233445566778899
998877665544332211
输出样例:
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

#include<stdio.h>
#include<string.h>
#define Z 200
typedef struct List
{
   
	int data[Z];
	int length;
}Number;
Number Search(char c[],Number num);
int main()
{
   
	int T;
	Number num1,num2;
	char m[Z],n[Z];
	int a[Z],b[Z][Z];
	int len1,len2,l[Z];
	int i,j,k,d;
	
	scanf("%d",&T);
	for(i=0;i<T;i++)
	{
   
		d=0;
	    scanf("%s",m);            //以字符型输入大数 
		scanf("%s",n);
		
		num1=Search(m,num1);       //判断大数位数以及倒叙转换数组 
		num2=Search(n,num2);
		
		len1=num1.length;
		len2=num2.length;

		if(len1>len2) k=len1;     // 找到计算的位数 
		else k=len2;
	    
		for(j=0;j<k;j++)
		
		 
	    for(j=0;j<k;j++)
	    {
   
		    a[j]=num1.data[j]+num2.data[j]+d;
	        d=a[j]/10;
	    	a[j]=a[j]%10;
		}
	
	
	    if(d!=0)                  //确定大数位数
		 {
   
		 	a[k]=d;
		 	l[i]=k+1;
			 }                      
	    else l[i]=k;
	    
	    for(j=0;j<l[i];j++)
	    b[i][j]=a[j];
	    
	    for(i=0;i<T;i++)
	{
    
	    for(j=l[i]-1;j>=0;j--)            //将大数以数组形式输出 
		printf("%d",b[i][j]);
			
		printf("\n");
	}
	    
	}

	return 0;
}

Number Search(char c[],Number num)
{
   
	int i=0,j=0;
    num.length=strlen(c);
    
    for(i=0,j=num.length-1;i<num.length,j>=0;i++,j--)      //倒叙存入数组 
    {
   
    	num.data[i]=c[j]-'0';
	}
    
    return num;
}

其实在这里我在将数字重新转换为字符上浪费了老鼻子力气,结果还是没成功,后来想了想,可以直接转换为数字数组输出,稍稍的妥协一下吧–__–!