原题链接:三进制小数
解题思路:三进制转换与二进制类似,三进制小数的转换是乘以3,取整,然后顺序输出即可。注意的是最后一位要四舍五入哦。原来方法考虑不周,没有考虑特殊情况,直接输出了,测试数据不够强大,也AC了。
但是要考虑特殊的情况,所以先用数组保存,判断进位之后再输出。
例如:第10位原来是2,第11位恰好又有进位,加上1第10位就变成3了。所以进位之后,还要判断前面的是否等于3,若是,还要往前继续进位;否则就不用再考虑。
#include<stdio.h>#include <math.h>#define N 11void test(int bit[],int n){ int i; if(bit[n-1]<2) //判断最后一位是否小于2,若是,则不进位 ,不用再考虑前面的 return ; bit[n-2]++; //进位,进位之后要考虑是否等于3 for(i=n-2;i>=0;i++) { if(bit[i]==3) { bit[i]=0; //当前位为0 bit[i-1]++; //逢3进1 } else //只要不等于3,就不用再考虑前面的了 break; } }int main(){ int a,b,c,i=0; //a是分子,b是分母 int bit[N+2]; while(scanf("%d/%d",&a,&b)!=EOF) { for(i=0;i<N;i++) //输出前9位 { bit[i]=(a*3)/b; //printf("%d",(a*3)/b); a=(a*3)%b; } test(bit,N); printf("."); for(i=0;i<N-1;i++) printf("%d",bit[i]); printf("\n"); } return 0;}
原题链接:三进制小数
解题思路:三进制转换与二进制类似,三进制小数的转换是乘以3,取整,然后顺序输出即可。注意的是最后一位要四舍五入哦。原来方法考虑不周,没有考虑特殊情况,直接输出了,测试数据不够强大,也AC了。
但是要考虑特殊的情况,所以先用数组保存,判断进位之后再输出。
例如:第10位原来是2,第11位恰好又有进位,加上1第10位就变成3了。所以进位之后,还要判断前面的是否等于3,若是,还要往前继续进位;否则就不用再考虑。
#include<stdio.h>#include <math.h>#define N 11void test(int bit[],int n){ int i; if(bit[n-1]<2) //判断最后一位是否小于2,若是,则不进位 ,不用再考虑前面的 return ; bit[n-2]++; //进位,进位之后要考虑是否等于3 for(i=n-2;i>=0;i++) { if(bit[i]==3) { bit[i]=0; //当前位为0 bit[i-1]++; //逢3进1 } else //只要不等于3,就不用再考虑前面的了 break; } }int main(){ int a,b,c,i=0; //a是分子,b是分母 int bit[N+2]; while(scanf("%d/%d",&a,&b)!=EOF) { for(i=0;i<N;i++) //输出前9位 { bit[i]=(a*3)/b; //printf("%d",(a*3)/b); a=(a*3)%b; } test(bit,N); printf("."); for(i=0;i<N-1;i++) printf("%d",bit[i]); printf("\n"); } return 0;}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复