sdut2613(This is an A+B Problem)大数加法(乘法)

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
char a[1010],b[1010];
int ta[1010],tb[1010];
int main()
{
int l2,l1,l;
while(scanf("%s%s",a,b)!=EOF)
{
memset(ta,0,sizeof(ta));
memset(tb,0,sizeof(tb));
l1=strlen(a);
l2=strlen(b);
if(l1<l2) l=l2;
else l=l1;
for(int i=0;i<l;i++)
{
if(l1-1>=0)
{
ta[i]=a[l1-1]-'0';
l1--;
}
else ta[i]=0;
if(l2-1>=0)
{
tb[i]=b[l2-1]-'0';
l2--;
}
else tb[i]=0;
}
int t;
for(int i=0;i<l;i++)
{
t=ta[i]+tb[i];
if(t>=10)
{
ta[i]=t-10;
ta[i+1]++;
}
else ta[i]=t;
}
int flag=0;
for(int i=l;i>=0;i--)
{
if(flag||ta[i])
{
flag=1;
printf("%d",ta[i]);
}
}
if(!flag) printf("0");//用于解决只有0相加的状况
printf(" ");

}
return 0;
}

 Integer Inquiry

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
    int l1;
    char a[1001];
    int b[1001];
    memset(b,0,sizeof(b));
    while(scanf("%s",a)!=EOF)
    {
        if(a[0]=='0') break;
        l1=strlen(a);
        int j=0;
        for(int i=l1-1; i>=0; i--)
        {
            b[j]=b[j]+a[i]-'0';
            j++;
        }
    }
    int t;
    for(int i=0; i<1001; i++)
    {
        t=b[i];
        if(b[i]>9)
        {
            b[i]=t%10;
            b[i+1]=b[i+1]+t/10;
        }
        else b[i]=t;
    }
    int flag=0;
    for(int i=1001-1; i>=0; i--)
    {
        if (flag || b[i])
        {
            flag = 1;
            printf("%d",b[i]);
        }
    }
    if (!flag) printf("0");
    printf("
");
    return 0;
}

 Product

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
char str1[300],str2[300];
int d[300],f[300],c[601];
int l1,l2,l,w,e;
void init()
{
    memset(c,0,sizeof(c));
    memset(d,0,sizeof(d));
    memset(f,0,sizeof(f));
}
int main()
{
    while(scanf("%s",str1)!=EOF)
    {
        init();
        scanf("%s",str2);
        l1=strlen(str1);
        l2=strlen(str2);
        l=max(l1,l2);
        w=l1;
        e=l2;
        for(int i=0; i<l; i++)
        {
            if(l1-1>=0)
            {
                d[i]=str1[l1-1]-'0';
                l1--;
            }
            else d[i]=0;
            if(l2-1>=0)
            {
                f[i]=str2[l2-1]-'0';
                l2--;
            }
            else f[i]=0;
        }
        for(int i=0; i<w; i++)
        {
            for(int j=0; j<e; j++)
            {
                c[i+j]=c[i+j]+d[i]*f[j];
            }
        }
        for(int i=0; i<600; i++)
        {
            if(c[i]>=10)
            {
                c[i+1]+=c[i]/10;
                c[i]=c[i]%10;
            }
        }
        int flag=0;
        for(int i=600; i>=0; i--)
        {
            if(flag||c[i])
            {
                flag=1;
                printf("%d",c[i]);
            }
        }
        if(flag==0) printf("0");
        printf("
");


    }
    return 0;
}
原文地址:https://www.cnblogs.com/zhangmingcheng/p/3797303.html