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;
}

猜你喜欢

转载自blog.csdn.net/qq_40788199/article/details/81363037
今日推荐