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