原题链接:蓝桥杯算法提高VIP-实数相加
```c
#include<stdio.h>
#include<string.h>
//代码比较长,其实很好理解,愿意了解的可以看看
int main()
{
char s1[205],s2[205];//起始字符串
//定义整数部分a1,b1,小数部分a2,b2; 结果 整数部分c1, 小数部分c2
static int a1[101],a2[101],b1[101],b2[101],c1[505],c2[505];
int i,flag = 1,top_a1,top_a2,top_b1,top_b2,len_c1,len_c2;
//定义小数位的进位变量jinshu,整数位的进位变量chushu
int jinshu ,chushu;
# ### //为变量赋初值
top_a1 = top_a2 = top_b1 = top_b2 = 0;
len_c1 = len_c2 = 0;
jinshu = chushu = 0;
scanf("%s",s1);
getchar();
scanf("%s",s2);
//当遇到小数点时改变flag,存入另一数组
for( i=0; i<strlen(s1); i++){
if(s1[i] == '.'){
flag = 0;
continue;
}
if(flag) a1[top_a1++] = (s1[i]-'0');
else a2[top_a2++] = (s1[i]-'0');
}
int len_a1 = top_a1-1;
int len_a2 = top_a2-1;
flag = 1;
for( i=0; i<strlen(s2); i++){
if(s2[i] == '.'){
flag = 0;
continue;
}
if(flag) b1[top_b1++] = (s2[i]-'0');
else b2[top_b2++] = (s2[i]-'0');
}
int len_b1 = top_b1-1;
int len_b2 = top_b2-1;
//-------------------------------------------------
//将小数部分结果写在c2中
//加len_a2>=0,防止因为前面的-1操作出现bug;
while(len_a2>=0&&len_a2>len_b2){
c2[len_c2++] = a2[len_a2];
len_a2 --;
}
while(len_b2>=0&&len_a2<len_b2){
c2[len_c2++] = b2[len_b2];
len_b2 --;
}
while(len_a2>=0&&len_a2==len_b2){
c2[len_c2] = a2[len_a2]+b2[len_b2]+jinshu ;
jinshu = c2[len_c2]/10;
c2[len_c2] = c2[len_c2]%10;
len_c2 ++;
len_a2 --;
len_b2 --;
}
len_c2 --;
//-----------------------------------------------------
chushu += jinshu;//将小数位的进位加到整数位
while(len_a1>=0&&len_b1>=0){
c1[len_c1] = a1[len_a1]+b1[len_b1]+chushu;
chushu = c1[len_c1]/10;
c1[len_c1] = c1[len_c1]%10;
len_c1 ++;
len_a1 --;
len_b1 --;
}
while(len_a1>=0){
c1[len_c1] = a1[len_a1]+chushu;
chushu = c1[len_c1]/10;
c1[len_c1] = c1[len_c1]%10;
len_c1 ++;
len_a1 --;
}
while(len_b1>=0){
c1[len_c1] = b1[len_b1]+chushu;
chushu = c1[len_c1]/10;
c1[len_c1] = c1[len_c1]%10;
len_c1 ++;
len_b1 --;
}
while(chushu){//处理整数位最高位进位
c1[len_c1] = chushu%10;
chushu /= 10;
len_c1++;
}
len_c1 --;
for( i=len_c1; i>=0; i--){
printf("%d",c1[i]);
}
//若均为整数,则len_c2会为-1(前面有个-1操作),以此判断是否有小数
if(len_c2>=0) printf(".");
for( i=len_c2; i>=0; i--){
printf("%d",c2[i]);
}
printf("\n");
return 0;
}
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复