我的,很粗糙,参考
乘法
#include <iostream.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
char str1[500];
char str2[500];
int x[1000];
int a[500];
int b[500];
int i;
int len;
int m;
int j;
int j3;
int j1,j2;
while (cin>>str1>>str2)
{
int n=0;
int y=0;
int len1=strlen(str1);
int len2=strlen(str2);
for (j=0; j<500; j++)
{
a[j]=0;
b[j]=0;
}
for (i=0; i<1000; i++)
{
x[i]=0;
}
for (i=499,len=len1-1; len>=0; i--,len--)
{
a[i]=str1[len]-'0';
}
for (i=499,len=len2-1; len>=0; i--,len--)
{
b[i]=str2[len]-'0';
}
for (j1=499; j1>(499-len2); j1--)
{
for (j2=499,j3=999; j2>(499-len1); j2--,j3--)
{
x[j3-y]=x[j3-y]+(a[j2]*b[j1]);
}
y++;
}
for (m=999; m>0; m--)
{
if (x[m]/10!=0)
{
x[m-1]=x[m-1]+x[m]/10;
x[m]=x[m]%10;
}
}
for (m=0; m<1000; m++)
{
if(x[m]==0)
{
continue;
}
else
{
break;
}
}
if(m==1000)
{
cout<<x[0];
}
else
{
int l;
for(l=m; l<1000; l++)
{
cout<<x[l];
}
}
cout<<endl;
}
return 0;
}
除法
#include<iostream>
#include<stdio.h>
#include <string.h>
using namespace std;
int main()
{
char a[950],b[950];
int a1[950],b1[950],c[950];
int i,j=0,k,lena,lenb,temp;
while ( scanf("%s%s",a,b) == 2)
{
for(i=0;i<950;i++)
{
c[i]=0;
}
lena=strlen(a);
lenb=strlen(b);
for(i=0;i<lena;i++)
{
a1[i]=a[i]-'0';
}
for(i=0;i<lenb;i++)
{
b1[i]=b[i]-'0';
}
for(i=0;i<lenb;i++)
{
if(b1[i]==0)
{
;
}
else
{
break;
}
}
if(i==lenb)
{
continue;
}
else
{
if(lena<lenb||(lena==1&&a1[0]==0))
{
cout<<0<<endl;
continue;
}
for(j=0;j<=lena-lenb;j++)
{
while(a1[j]>=0)
{
for(k=lenb-1;k>=0;k--)
{
a1[j+k]-=b1[k];
if(k!=0)
{
if(a1[j+k]<0)
{
a1[j+k]+=10;
a1[j+k-1]--;
}
}
}
c[j+lenb-1]++;
}
for(k=lenb-1;k>=0;k--)
{
a1[j+k]+=b1[k];
if(a1[j+k]>9)
{
a1[j+k]-=10;
a1[j+k-1]++;
}
}
c[j+lenb-1]--;
a1[j+1]+=10*a1[j];
}
for(i=lenb-1,temp=0;i<=lena-1;i++)
{
if(c[i]!=0)
{
temp=1;
}
if(temp==1)
{
printf("%d",c[i]);
}
}
cout<<endl;
}
}
return 0;
}