Fork me on GitHub

大数加和问题(C语言实现)

大数加和问题

以前一直想不通为什么我们痞帅痞帅的java老师为什么不跟我们讲java的知识点,而是不惜用四五周的时间来讲授一些算法知识,现在我有点明白他的意思了。

前面用了java来实现大数加和问题【在这】,感觉很麻烦(解算法题还是我大C语言好用啊!),后面复习时用C语言实现了一遍

此代码的限制

只能先输入一个较大的数,再输入长度小于或等于前一个数的数

C语言代码

#include<stdio.h>
#include<string.h>
#define maxn 1024
void add(char* big,char* small)
{
    char temp1[maxn],temp2[maxn],sum[maxn];
    int len1 = strlen(big);
    int len2 = strlen(small);

    //反转入库
    int j = 0;
    for(int i = len1-1;i>=0;--i)
    {
        temp1[j++] = big[i];
    }
    //temp1[j] = '\0';

    j = 0;
    for(int i = len2-1;i>=0;--i)
    {
        temp2[j++] = small[i];
    }

    //补齐small
    for(int i = len2;i<len1;i++)
    {
        temp2[i] = '0';
        temp2[len1] = '\0';
    }

    //按位相加
    int aSum;
    int overFlow = 0;
    int carryBit = 0;
    for(int i = 0;i<len1;i++)
    {
        aSum = temp1[i] - '0' + temp2[i] - '0' + carryBit;//字符减去‘0’得到数字
        if(aSum>9)
        {
            //先判断是否将要overFloat
            if(i == (len1-1))
            {
                overFlow = 1;
            }
            carryBit = 1;
            sum[i] = aSum - 10 + '0';
        }else{
            sum[i] = aSum + '0';
        }
    }

    //判断是否溢出
    if(overFlow == 1)
    {
        sum[len1++] = carryBit + '0';
    }
    sum[len1] = '\0';
    for(int i = len1-1;i>=0;i--)
        putchar(sum[i]);
}
int main()
{
    char str1[maxn],str2[maxn];
    gets(str1);
    gets(str2);
    add(str1,str2);
}

结果:

Adhere to original technology sharing, your support will encourage me to continue to create!