1. 程式人生 > >1001 A + B Problem II(C語言 大數加法模板)

1001 A + B Problem II(C語言 大數加法模板)

#include<stdio.h>
int len(char *a)//一個判斷字串長度的函式與strlen一樣
{
    int i=0;
    while(*a++!='\0')
    {
        i++;
    }
    return i;
}
/***************************************************************/
int main()
{
    int i,j,la,lb,n,k;
    char a[1005],b[1005],t;//題目要求是1000這裡注意
    scanf("%d",&n);//n組資料
	k=n;//僅僅為了輸出格式
    while(n--)
    {
        t='0';//這個t在我的程式裡很重要,往下看
        if(n==k-1)
            getchar();//防止陣列得到不該得到的值
        for(i=0;;i++)
        {
            scanf("%c",&a[i]);
            if(a[i]==' ')//輸入第一個陣列時以空格結束
                break;
        }
        a[i]='\0';//!!!!!!注意!!!!!!加個'\0'否則會輸出亂碼
        for(j=0;;j++)
        {
            scanf("%c",&b[j]);//陣列b同理
            if(b[j]=='\n')
                break;
        }
        b[j]='\0';//繼續注意
/***************************************************************/
        la=len(a);//計算長度
        lb=len(b);
        if(la>=lb)//以長的那個陣列為基礎進行運算  
        {        
            printf("Case %d:\n%s + %s = ",k-n,a,b);//輸出格式,不懂請看題目
            for(j=j-1,i=i-1;;j--,i--)//這裡的for一定不能巢狀
            {
                if(b[j]<='9'&&b[j]>='0'&&j>=0)
				//這裡有個非常重要的東西j>=0
				//這個條件是用來防止陣列越界的,很重要。
                a[i]+=(b[j]-'0');//不懂請看asc碼
                if(a[i]>'9'&&i>=0)//這個if語句是用來進位的
                {
                    a[i]-=10;
                    if((i-1)>=0)
                        a[i-1]++;
                    else
                        t++;
					//t是保證陣列不越界的
					//像99+1=100這樣的,99有兩個元素
					//但是100有3個,t就是來儲存那個1的
                }
                if(i==0)
                    break;
            }
            if(t<='9'&&t>'0')//注意控制輸出格式
            {
                printf("%c",t);
                puts(a);
                if(n!=0)
                    printf("\n");
            }
            else
            {
                puts(a);
                if(n!=0)
                    printf("\n");
            }
        }
/***************************************************************/
        else
        {
            printf("Case %d:\n%s + %s = ",k-n,a,b);//下面同理,上面看懂了下面也懂了     
            for(j=j-1,i=i-1;;j--,i--)
            {
                if(a[i]<='9'&&a[i]>='0'&&i>=0)
                b[j]+=(a[i]-'0');
                if(b[j]>'9'&&j>=0)
                {
                    b[j]-=10;
                    if((j-1)>=0)
                        b[j-1]++;
                    else
                        t++;                    
                }
                if(j==0)
                    break;
            }
            if(t<='9'&&t>'0')
            {
                printf("%c",t);
                puts(b);
                if(n!=0)
                    printf("\n");
            }
            else
            {
                puts(b);
                if(n!=0)
                    printf("\n");
            }
        }
        
    }
    return 0;
}