1. 程式人生 > >C語言——大數加法

C語言——大數加法

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define MAX 1000

void my_and(char a[],char b[],int m,int n)
{
    int i=n-1;
    int j=m;
    char add[MAX];//計算結果儲存 
    add[m+1]='\0';//字串結束標誌 
    add[m]='0';//賦初值 
        for (j=m;j>=0;j--)
        {
            if (i>=0)//低位開始計算,直至小的數結束 
            {
                add[j]=add[j]+a[j-1]+b[i]-'0'-'0';//兩個數相加保存於add中    
                i--;
            }
            else
            {
                add[j]=add[j]+a[j-1]-'0';//小的數加完,只加大的數    
            }
            if (add[j]>'9')//有進位 
            {
                add[j]=add[j]-10;//該位減10 
                add[j-1]='1';//賦初值,進1 
            }
            else 
                add[j-1]='0';//賦初值,無進位 
        }

        printf ("result=%s\n",add);//列印結果 
}

int main(void)
{
    char num1[MAX],num2[MAX];//定義兩個字元陣列用於接受資料 
    int n,m;
    printf ("please input num1 :");
    fgets(num1,sizeof(num1),stdin);//接收第一個數 
    if (num1[strlen(num1)-1]=='\n')
    num1[strlen(num1)-1]='\0';
    
    printf ("please input num2 :");
    fgets(num2,sizeof(num2),stdin);//接收第二個數 
    if (num2[strlen(num2)-1]=='\n')
    num2[strlen(num2)-1]='\0';
    
    printf ("num1: %s\nnum2: %s\n",num1,num2);
    
    m=strlen(num1);
    n=strlen(num2);//計算數的長度,即位數 
    
    if (m>=n)// 大數在前,小數在後,呼叫函式 
        my_and(num1,num2,m,n);
    else
        my_and(num2,num1,n,m);
        
    return 0;
}