高精度加法压位
高精度加法压位基本上做好了,但是有一个测试数据过不去:99999999999999999999999999999999999999999999
1
多一个9结果正确,少一个9、两个9结果也正确,这是为什么?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[1000],b[1000],sum[1000]={0}; /*开大几位,避免越界*/
int flag=0;
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
void rollback(int array[],int Len)
{
int temp,i;
for(i=0;i<Len/2;i++)
temp=array[i],array[i]=array[Len-i-1],array[Len-i-1]=temp;
}
int dismember(char array[],int length)
{
int i,j,t;
if(length%4)
{
t=4-length%4;
for(i=t+length-1;i>=t;i--)
array[i]=array[i-t];
length+=t;
for(i=0;i<t;i++) array[i]='0';
}
for(i=0,j=0;i<length;i+=4,j++)
{
if(flag==0)
a[j]=(array[i]-'0')*1000+(array[i+1]-'0')*100+(array[i+2]-'0')*10+array[i+3]-'0';
if(flag==1)
b[j]=(array[i]-'0')*1000+(array[i+1]-'0')*100+(array[i+2]-'0')*10+array[i+3]-'0';
}
length=j;
flag=1;
return length;
}
int main()
{
int i,plus=0;
int a_length,b_length;
char temp[1000];
gets(temp);
a_length=strlen(temp);
a_length=dismember(temp,a_length);
rollback(a,a_length);
gets(temp);
b_length=strlen(temp);
b_length=dismember(temp,b_length);
rollback(b,b_length);
for(i=0;i<max(a_length,b_length);i++)
{
plus=a[i]+b[i]+plus;
sum[i]=plus%10000;
plus=plus/10000;
}
i=i-1;
printf("%d",sum[i]);
for(i=i-1;i>=0;i--)
if(sum[i]>1000) printf("%d",sum[i]);
else
if(sum[i]>100) printf("0%d",sum[i]);
else
if(sum[i]>10) printf("00%d",sum[i]);
else
printf("000%d",sum[i]);
system("pause");
return 0;
}