大数相乘

        对于大数问题,最好的解决方法就是通过字符串(字符数组)向整形数组转换,并进行一系列的操作(四则运算)。并以数组的形势输出结果。因为这一次是建立在大数相加与大数相乘的基础上的,所以对减法,除法不做解释。但,我相信,即便是减法,除法与加,乘有这样或那样的区别,但究其根本思想还是相同的。

        注意:在进行运算时,最好是将输入的字符数组的顺序颠倒,以便使清楚地知道数的位数,尤其在乘法中方便取位。而随带的就要格外注意在输出时首位会有“0”的出现,这时就需要将首位的“0”删去。

乘法:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char s[105],l[105];
    int i,e,n,m,sn[105],ln[105],t[105]= {0},g,f=0;
    gets(s);
    gets(l);
    n=strlen(s);
    m=strlen(l);
    for(i=n-1; i>=0; i--)
        sn[n-1-i]=s[i]-'0';
    for(i=m-1; i>=0; i--)
        ln[m-1-i]=l[i]-'0';
    for(i=0; i<n; i++)
        for(e=0; e<m; e++)
        {
            g=t[i+e]+ln[e]*sn[i];
            if(g>=10)
            {
                t[i+e]=g%10;
                t[i+1+e]+=g/10;
            }
            else
                t[i+e]=g;
        }

    for(i=n+m; i>=0; i--)
    {
        if(t[i])
            f=1;
        if(f || i==0)
            printf("%d",t[i]);//删去首位的“0”
    }
    printf("\n");
    return 0;
}

加法:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char g[105]= {NULL};
    int t[105]= {0},a[1000]= {0},l,i,j;
    while(scanf("%s",g)!=EOF&&strcmp(g,"0")!=0)
    {

        l=strlen(g);
        for(i=0; i<l; i++)
            if(g[i]=='NULL')
                break;
        for(i=l-1,j=0; i>=0; i--,j++)
        {
            t[j]+=g[i]-'0';
            if(t[j]>9)
            {
                t[j]=t[j]%10;
                t[j+1]+=1;
            }
        }
    }
    if(t[l]!=0)
        printf("%d",t[l]);
    for(i=l-1; !t[i]; i--);

    for(j=i; j>=0; j--)
    {
        printf("%d",t[j]);
    }
    printf("\n");

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值