关于大整数运算,帮忙看下哪里出错了~~(上次的错误以纠正,又有新问题!)
这是一个大整数的加法,运行后,后面的位数有时都正确(应该跟输入的位数有关),就是最前面的三位数的位置乱了。#include <stdio.h>
#include <string.h>
#define N 200
int change(char str[],int d[]) //字符串转换为整形
{
int i,j,len=strlen(str);
j=N-1;
for(i=0;i<N-1;i++)
d[i]=0;
for(i=len-1;i-3>=0;i-=4)
d[j--]=(str[i-3]-'0')*1000+(str[i-2]-'0')*100+(str[i-1]-'0')*10+(str[i]-'0');
if(i==0)
d[j--]=str[i]-'0';
if(i==1)
d[j--]=(str[i]-'0')*10+(str[i-1]-'0');
if(i==2)
d[j--]=(str[i]-'0')*100+(str[i-1]-'0')*10+(str[i-2]-'0');
return j+1;
}
void change2(char th[],int k,int c[]) //整形转换为字符串
{
int i,len;
char s[10];
char temp;
sprintf(th,"%d",c[k]);
for(i=k+1;i<N;i++)
{
sprintf(s,"%d",c[i]);
strcat(th,s);
}
}
void add(char st1[],char st2[],char st[]) //乘法
{
int a[N],b[N],c[N];
int i,x=0,k1,k2,k,re=0;
if (strlen(st1)==0)
{
strcpy(st,st2);
return;
}
if (strlen(st2)==0)
{
strcpy(st,st1);
return;
}
k1=change(st1,a);
k2=change(st2,b);
k=k1<k2?k1:k2;
for(i=N-1;i>=k;i--)
{
x=a[i]+b[i]+re;
c[i]=x%10000;
re=x/10000;
}
if(re>0)
{
k--;
c[i]=re;
}
change2(st,k,c);
}
int main()
{
char st1[N],st2[N],st[N];
scanf("%s%s",st1,st2);
add(st1,st2,st);
printf("%s",st);
return 0;
}
[ 本帖最后由 v943761 于 2010-10-20 19:32 编辑 ]