?? 高精度加法(整數和浮點)_20061211911.txt
字號:
#include<stdio.h>
#include<string.h>
#define N 1001
void high_precise_add(char *a,char *b)/*可帶小數相加,結果放在a中可用于整數和浮點數高精度相加*/
{
int i,j,la,lb,pa,pb,p;
la=strlen(a);lb=strlen(b);
pa=0;while(pa<la&&a[pa]!='.')pa++;
if(pa<la){for(j=pa;j<la-1;j++)a[j]=a[j+1];la--;a[la]='\0';}
pb=0;while(pb<lb&&b[pb]!='.')pb++;
if(pb<lb){for(j=pb;j<lb-1;j++)b[j]=b[j+1];lb--;b[lb]='\0';}
p=pa;
if(pa<pb)
{
for(i=la-1;i>=0;i--)a[i+pb-pa]=a[i];
la+=pb-pa;a[la]='\0';
for(i=0;i<pb-pa;i++)a[i]='0';
p=pb;
}
else if(pa>pb)
{
for(i=lb-1;i>=0;i--)
b[i+pa-pb]=b[i];
lb+=pa-pb;
b[lb]='\0';
for(i=0;i<pa-pb;i++)
b[i]='0';
}
else ;
if(la<lb)
{
for(i=la;i<lb;i++)a[i]='0';
la=lb;a[la]='\0';
}
else
{
for(i=lb;i<la;i++)b[i]='0';
lb=la;b[lb]='\0';
}
j=0;
i=la-1;
while(i>=0)
{
pa=j;
j=(a[i]+b[i]-96+j)/10;
a[i]=(a[i]+b[i]-96+pa)%10+48;
i--;
}
if(j>0){for(i=la;i>0;i--)a[i]=a[i-1];la++;a[0]=j+48;a[la]='\0';p++;}
while(la>p&&a[la-1]=='0')la--;
a[la]='\0';
if(la>p){for(i=la+1;i>p;i--)a[i]=a[i-1];a[p]='.';a[la+1]='\0';}
}
int main()
{
char a[N],b[N];
while(1)
{
scanf("%s %s",a,b);
high_precise_add(a,b);
printf("%s\n",a);
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -