<pre name="code" class="objc">#include<stdio.h>//自己打的
#include<math.h>
#include<string.h>
int ss(int n)//学长加的打表= =
{
int i;
for(i=2;i<=sqrt(n);i++){
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int a[105],b[105],c[105],num1,num2,i,l1,l2;
char str1[1000],str2[1000];
//int f[20]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
int f[1000];
int z=0;
for(i=2;i<1000;i++)
{//学长加的打表= =
if(ss(i)==1)
f[z++]=i;
}
while(EOF!=scanf("%s%s",str1,str2)&&(strcmp(str1,"0")!=0&&strcmp(str2,"0")!=0))
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
num1=0;num2=0;
l1=strlen(str1);l2=strlen(str2);
for(i=0;i<l1;i++)
{
if(str1[i]>='0'&&str1[i]<='9')
{
a[num1]*=10;
a[num1]+=str1[i]-'0';
}
else
num1++;
}
for(i=num1;i>=0;i--)
c[i]=a[num1-i];
for(i=0;i<l2;i++)
{
if(str2[i]>='0'&&str2[i]<='9')
{
b[num2]*=10;
b[num2]+=str2[i]-'0';
}
else if(str2[i]==',')
num2++;
}
for(i=num2;i>=0;i--)
c[i]+=b[num2-i];
num1=num1>num2?num1:num2;
for(i=0;i<=num1;i++)
{
if(c[i]>=f[i])
{
c[i]=c[i]%f[i];
c[i+1]+=1;
}
}
if(c[num1+1]!=0)
num1++;
for(i=num1;i>=0;i--)
{
printf("%d",c[i]);
if(i) printf(",");
}
printf("\n");
}
return 0;
}
<pre name="code" class="objc"><pre name="code" class="objc">#include<stdio.h> //使用输入输出函数
#include<string.h> //使用字符串函数
int prim[50]; //存储素数列表
int p[250]; //用于筛选素数处理
void makeprime() //筛选法求素数
{
int i,j;
memset(p,0,sizeof(p)); //初始化数组
for(i=2;i<125;i++) //筛选法求素数
for(j=i+i;j<250;j+=i)
p[j]=1;
for(i=2,j=0;i<250&&j<50;i++) //形成素数列表
if(!p[i])
prim[j++]=i;
}
int main()
{
char x[1000],y[1000],*p; //输入数组,存储原始数据、指针
int a[50],b[50],t; //处理数组,中间变量
int len,lena,lenb;//记录长度
int i,j; //循环变量
makeprime();//产生素数数组
while(scanf("%s%s",x,y)&&x[0]!='0'||y[0]!='0') //初始化
{
//初始化处理数组
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
//处理第一个“火星数”
lena=0;
p=x;
while(strstr(p,","))//提取数字
{
sscanf(p,"%d",&a[lena++]);
p=strstr(p,",")+1;
}
sscanf(p,"%d",&a[lena]);
for(j=0;j<=lena/2;j++)//数字逆序处理[低位放前面,高位放后面,利于进位处理]
{
t=a[j];
a[j]=a[lena-j];
a[lena-j]=t;
}
//同上
lenb=0;
p=y;
while(strstr(p,","))
{
sscanf(p,"%d",&b[lenb++]);
p=strstr(p,",")+1;
}
sscanf(p,"%d",&b[lenb]);
for(j=0;j<=lenb/2;j++)
{
t=b[j];
b[j]=b[lenb-j];
b[lenb-j]=t;
}
//检测输出
/*printf("---------a---------\n");
for(i=0;i<=lena;i++)printf("%d ",a[i]);
printf("\n\n");
printf("---------b---------\n");
for(i=0;i<=lenb;i++)printf("%d ",b[i]);
printf("\n\n");*/
//加法处理,进位处理
len=lena>lenb?lena:lenb;//提取最大长度
for(i=0;i<=len;i++)
{
a[i]+=b[i]; //加法处理
if(a[i]>=prim[i]) //进位处理
a[i+1]+=a[i]/prim[i],a[i]=a[i]%prim[i];
}
if(a[i]>=prim[i]) //假设最高位需要进位
a[i+1]+=a[i]/prim[i],a[i]=a[i]%prim[i];
if(a[i])len++; //若最高位进位,总体长度加一
//输出答案【中间用逗号隔开,最后要换行】
//printf("ans=");
printf("%d",a[len]);
for(i=len-1;i>=0;i--)printf(",%d",a[i]);
printf("\n");
}
return 0;
}