1.1 2.9
1.1111111111 2.3444323343
1 1.1
4
3.4555434454
2.1
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,l,len1,len2,flag,sum[1100],p,zb;
char a[1000],b[1000];//把兩個加數存分別存放在字符型數組a和b裏
while(scanf("%s%s",a,b)!=-1){//輸入的兩個數字符型
len1=strlen(a);//求出數組a的長度
len2=strlen(b);//求出數組b的長度
memset(sum,0,sizeof(sum));//庫函數memeset 將地址sum 開始的sizeof(sum)字節內容置成0
//sizeof(sum)的值就是sum 的長度
//memset 函數在string.h 中聲明
k=len1;//把a的長度賦值給K
l=len2;
flag=0;//不含小數點
for(i=0;a[i];i++)
if(a[i]=='.')
break;
k=i+1;//當判斷到小數點的時候將小數點在第幾位存到k裏
if(a[i])//是小數點的時候flag爲1
flag=1;
for(j=0;b[j];j++)//同數組a,定義數組b
if(b[j]=='.')
break;
l=j+1;//當判斷到小數點的時候將小數點在第幾位存到l裏
if(b[j])
flag=1;
if(i>j)
{
zb=i+1;//把兩數對齊後小數點的位置
}
else
{
zb=j+1;
}
p=zb;//把小數點下標賦值給p
i--;//位數後移
j--;
for(;;i--,j--)//計算小數點之前的部分
{
if(i>=0&&j>=0)//判斷兩個數是否爲0
{sum[p--]=a[i]-'0'+b[j]-'0';}//把字符串轉換成數值再相加
else if(i>=0&&j<0)
{sum[p--]=a[i]-'0';}
else if(i<0&&j>=0)
{sum[p--]=b[j]-'0';}
else if(i<0&&j<0)
{break;}
}
p=zb+1;//計算小數點之後的部分
for(;;k++,l++){
if(k<len1&&l<len2)//判斷小數點後面是否還有數
sum[p++]=a[k]-'0'+b[l]-'0';//把字符串轉換成數值再相加
else if(k<len1&&l>=len2)
sum[p++]=a[k]-'0';
else if(k>=len1&&l<len2)
sum[p++]=b[l]-'0';
else if(k>=len1&&l>=len2)
break;
}
for(i=p-1;i>=0;i--)//進位
if(sum[i]>=10){
sum[i]=sum[i]-10;
sum[i-1]++;
}
i=0;
while(sum[i]==0)//去除前導零
i++;
for(;i<=zb;i++)
printf("%d",sum[i]);//輸出整數部分的和
while(sum[p]==0)//去除後導0
p--;
if(p<=zb)//如果結果爲整數,去掉小數點
flag=0;
if(flag){//輸出整體小數
printf(".");
for(i=zb+1;i<=p;i++)
printf("%d",sum[i]);
}
printf("\n");
}
return 0;
}