日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大明A+B

發布時間:2024/1/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大明A+B 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大明A+B Time Limit:1000MS ? ? Memory Limit:32768KB ? ? 64bit IO Format:%I64d & %I64u

Description
話說,經過了漫長的一個多月,小明已經成長了許多,所以他改了一個名字叫“大明”。?
這時他已經不是那個只會做100以內加法的那個“小明”了,現在他甚至會任意長度的正小數的加法。?
現在,給你兩個正的小數A和B,你的任務是代表大明計算出A+B的值。?
?
Input
本題目包含多組測試數據,請處理到文件結束。?
每一組測試數據在一行里面包含兩個長度不大于400的正小數A和B。
?
Output
請在一行里面輸出輸出A+B的值,請輸出最簡形式。詳細要求請見Sample Output。?
?
Sample Input
1.1 2.9
1.1111111111 2.3444323343
1 1.1?
?
Sample Output
4
3.4555434454
2.1?

/*這道題原理超級簡單,唉...不過還是卡了我很久,做這道題的關鍵就是細心細心再細心,因為這道題要用到很多變量,特別容易混亂...*/ /*AC*/ #include<stdio.h> #include<string.h> int main() {char a[410],b[410];int za[410],zb[410],xa[410],xb[410],sz[410],sx[410];while (scanf("%s%s",a,b)!=EOF){memset(za,0,sizeof(za));memset(zb,0,sizeof(zb));memset(xa,0,sizeof(xa));memset(xb,0,sizeof(xb));memset(sz,0,sizeof(sz));memset(sx,0,sizeof(sx));int lena=strlen(a),lenb=strlen(b);int i,j,ka,kb;ka=lena; //初始小數點位置默認為無kb=lenb; //初始小數點位置默認為無/*** 找小數的位置**/for (i=0;i<lena;i++){if (a[i]=='.'){ka=i;break;}}for (i=0;i<lenb;i++){if (b[i]=='.'){kb=i;break;}}/** *分離出整數**/for (i=ka-1,j=0;i>=0;i--,j++)za[j]=a[i]-'0';for (i=kb-1,j=0;i>=0;i--,j++)zb[j]=b[i]-'0';/*** 分離出小數部分**/if (ka<lena){for (i=ka+1,j=0;i<lena;i++,j++)xa[j]=a[i]-'0';}if (kb<lenb){for (i=kb+1,j=0;i<lenb;i++,j++)xb[j]=b[i]-'0';}/*** 小數部分相加**/int c=0,mx,mz,num=0;if (ka<lena||kb<lenb){mx=lena-ka-1>lenb-kb-1?lena-ka-1:lenb-kb-1;for (i=mx-1;i>=0;i--){sx[i]=(xa[i]+xb[i]+c)%10;c=(xa[i]+xb[i]+c)/10;}/*** 統計尾部的0的個數**/int flag=0;for (i=mx-1;i>=0;i--){if (sx[i]==0&&!flag){num++;continue;}flag=1;}}/*** 整數部分相加**/mz=ka>kb?ka:kb; //找到A,B兩個數小數位數多的那個for (i=0;i<mz;i++){sz[i]=(za[i]+zb[i]+c)%10; //這里的c能接收小數進到整數的進位c=(za[i]+zb[i]+c)/10;}if (c){sz[mz]=c;mz+=1;}for (i=mz-1;i>=0;i--)printf("%d",sz[i]);if ((ka<lena||kb<lenb)&&num<mx) //解釋一下,這里的條件有點復雜,(ka<lena||kb<lenb)指的是A或B中至少有一個是小數,{ //num<mx表示小數點后面的0的個數沒有超過小數的最大位數,說明小數點后面還有非0的數printf(".");for (i=0;i<mx-num;i++)printf("%d",sx[i]);}printf("\n");}return 0; }

總結

以上是生活随笔為你收集整理的大明A+B的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。