c语言实数加法程序,蓝桥杯 算法提高 实数相加(c语言版附注释)
試題 算法提高 實數相加
藍橋杯試題解答匯總鏈接
資源限制
時間限制:1.0s 內存限制:512.0MB
問題描述
計算兩個實數相加的結果。
輸入的實數滿足如下要求: (1)小數點前的整數部分最多100位,(2) 小數點后的小數部分最多100位.
輸入格式
兩行字符串,每行都是一個合法的實數。合法的意思是指:整數部分的值如果大于零,則最高位數字必定大于零. 如果整數部分的值為零,則整數部分只有一個零. 小數部分尾部可以有任意多的零. 可以沒有小數部分,此時也沒有小數點. 如果有小數點, 則至少需要有一位小數部分, 且允許是零.
輸出格式
相加結果。注意: 小數部分末尾如果有連續的0, 則它們都是有效數字,不能舍去. 如果是兩個整數相加, 則結果仍為整數而沒有小數部分.
樣例輸入
樣例一:
0.0000000000000000000000000000000000000111111111000000000000000000
100000000000000000000000000000000000000000000000000000.0
樣例二:
3
4
樣例三:
3.9
2
樣例四:
1.001
8.99999999999999999999999
樣例輸出
樣例一:
100000000000000000000000000000000000000000000000000000.0000000000000000000000000000000000000111111111000000000000000000
樣例二:
7
樣例三:
5.9
樣例四:
10.00099999999999999999999
附評測點(共5個)
1. 實數①:0.0000000000000000000000000000000000000111111111000000000000000000
實數②:100000000000000000000000000000000000000000000000000000.01
答案:100000000000000000000000000000000000000000000000000000.0100000000000000000000000000000000000111111111000000000000000000
2. 實數①:1
實數②:999
答案:1000
3. 實數①:1.001
實數②:8.99999999999999999999999
答案:10.00099999999999999999999
4. 實數①:56829032258064516129926580645227.1864406779661016949152542372881426180257510729613733905579399142
實數②:39542372881355932203389830508475921219513285714107296137.37339055793991416309012875536481
答案:39542372881355932203389887337508179284029415640687941364.5598312359060158580053829926529526180257510729613733905579399142
5. 實數①:7777777777777777777777777
實數②:113122112144441111122222222331.232345623
答案:113129889922218888900000000108.232345623
代碼
#include
#include
int main(){
char a[202],b[202],c[101],d[101];
scanf("%s",a);
scanf("%s",b);
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
int i,j=0,ap=0,bp=0,ka=0,kb=0;//ka,kb用來統計數組a和b的小數部分的位數
//ap,bp用來統計數組a和b的整數部分的位數
for(i=0;i
if(a[i]=='.'){
break;
}
ap++;
}
ka=strlen(a)-ap-1;
for(i=0;i
if(b[i]=='.'){
break;
}
bp++;
}
kb=strlen(b)-bp-1;
for(i=0;i
if(i
c[i]+=a[ap-1-i]-'0';
}
if(i
c[i]+=b[bp-1-i]-'0';
}
if(c[i]>9){//大于9則向前進1
c[i+1]+=1;
c[i]%=10;
}
}
if(ka>0||kb>0){//判斷是否有小數部分
for(i=0;i
if(i
d[i]+=a[i+ap+1]-'0';//小數部分正序輸入
}
if(i
d[i]+=b[i+bp+1]-'0';
}
}
if(ka
ka=kb;
}
if(ap
ap=bp;
}
for(i=ka-1;i>0;i--){//向前進1
if(d[i]>9){
d[i-1]+=1;
d[i]%=10;
}
}
if(d[0]>9){
c[0]+=1;
d[0]%=10;
while(c[j]>9){
c[j+1]+=1;
c[j]%=10;
}
}
if(c[ap]>0){
printf("%d",c[ap]);
}
for(i=ap-1;i>=0;i--){
printf("%d",c[i]);
}
printf(".");
for(i=0;i
printf("%d",d[i]);
}
}
else{
if(ap
ap=bp;
}
if(c[ap]>0){
printf("%d",c[ap]);
}
for(i=ap-1;i>=0;i--){
printf("%d",c[i]);
}
}
return 0;
}
總結
以上是生活随笔為你收集整理的c语言实数加法程序,蓝桥杯 算法提高 实数相加(c语言版附注释)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lives
- 下一篇: 【网络工程师】<软考中级>网络互联与互联