Q15—确定进制 函数,简化程序,strlen,进制转换
来源:互联网 发布:mac uefi 编辑:程序博客网 时间:2024/05/22 12:39
这道题在百炼上的编号是:2972
这道让我知道了自己在处理事情的逻辑上还有问题,编码能力还有待提高,代码的质量还有待优化,路漫漫修远兮,我需要的是昂起斗志,努力编码;
周五的时候,按照自己的思维过程进行code,结束后在pc上的编译器进行编译,成功通过,但是提交的时候是wrong answer,当时想了很久都不知道是哪里错了(现在觉得是十进制转换上出现了错误)。
搁浅,周日晚上,百度之,想看看别人的处理方法是否和我的一样,事实证明,我们的思维过程是一样的
都是希望将p,q,r转换为10进制,然后进行比较,看p*q==r?
但是看看代码,我把代码写成了浆糊。。。。
so,我决定安静的学学别人是如何写代码的:
1、学会多写函数,函数可以让程序变的简练,也提高了代码的重用性。将一个小功能,就可以写一个函数,在主函数调用就好了,瞬间感觉这样写代码,编程者的逻辑很清楚。
2、char str[100];
strlen(str),可以求得字符数组的长度。作为循环的边界
以后如果遇到进制转换问题,都用字符数组来表示。这样就不用 转换10进制的时候一会除10,一会余10了。这个很重要。
3、下面的这段代码,可以Mark,这是所有进制转换为10进制的代码,以后用的话就不用自己推敲很长时间,可以直接拿来用:
ret*=b; //将所有进制的数转换为10进制 str[0]*bn+str[1]*b[n-1]+...别弄反了 ret+=str[i]-'0';
4、命名,code的时候,希望小P同志不要老用a,b,c来表示变量了,这样以后看代码都不知道是什么意思,尽量用英文单词。
下面是这道题的代码,后面注释的是我之前自己写的,一坨浆糊,以此名戒!
#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>//函数,将数转换为10进制int ten(char *str,int b){ int i,len; int ret=0; len=strlen(str); for(i=0;i<len;i++) { if(str[i]-'0'>=b) return -1; else{ ret*=b; //将所有进制的数转换为10进制 str[0]*bn+str[1]*b[n-1]+...别弄反了 ret+=str[i]-'0'; } } return ret;}int main(){ int *result=(int *)malloc(sizeof(int)); int k=0; int j,b,n; scanf("%d",&n); char p[8],q[8],r[8]; int pret,qret,rret; while(n--) { scanf("%s %s %s",p,q,r); for(b=2;b<=16;b++) { pret=ten(p,b); qret=ten(q,b); rret=ten(r,b); if(pret==-1||qret==-1||rret==-1) continue; if(qret*pret==rret) { result[k]=b; k++; break; } } if(b==17) { result[k]=0; k++; } } for(j=0;j<k;j++) printf("%d\n",result[j]);/* int i,n; scanf("%d",&n); int *p=(int *)malloc(n*sizeof(int)); int *q=(int *)malloc(n*sizeof(int)); int *r=(int *)malloc(n*sizeof(int)); for(i=0;i<n;i++){ scanf("%d %d %d",&p[i],&q[i],&r[i]); if(p[i]>1000000||p[i]<1||q[i]>1000000||q[i]<1||r[i]>1000000||r[i]<1) printf("wrong input\n");} double z; int *b=(int *)malloc(n*sizeof(int)); //计算结果都转换为10进制,判断两边是否相等; //int num=0; int mp,mq,mr; int *a=(int *)malloc(sizeof(int)); int temp; int k,t; int j; for(j=0;j<n;j++) { int flag=0; mp=p[j]; mq=q[j]; mr=r[j]; for(i=2;i<=16;i++) { p[j]=mp; q[j]=mq; r[j]=mr; temp=0; //求sump double sump=0; t=0; while(p[j]%10!=0){ //提取个十百位上的数字,并判断是否大于等于当前进制 a[t]=p[j]%10; if(a[t]>=i) { temp=1; } t++; p[j]=p[j]/10; } for(k=0;k<t;k++) { z=pow(i,k); //算出转换进制后的总和 sump+=a[k]*z; } double sumq=0; t=0; while(q[j]%10!=0){ a[t]=q[j]%10; if(a[t]>=i) { temp=1; } t++; q[j]=q[j]/10; } for(k=0;k<t;k++) { z=pow(i,k); sumq+=a[k]*z; } double sumr=0; t=0; while(r[j]%10!=0){ a[t]=r[j]%10; if(a[t]>=i) { temp=1; } t++; r[j]=r[j]/10; } for(k=0;k<t;k++) { z=pow(i,k); sumr+=a[k]*z; } if(temp==1) continue; if((sump*sumq)==sumr) //进行比较,看是否为满足要求的进制,如果是,载入结果,并结束本次查找 { b[j]=i; flag=1; break; } } if(flag==0) { b[j]=0; } //printf("%d",j); } for(i=0;i<n;i++) printf("%d\n",b[i]);*/ return 0;}
- Q15—确定进制 函数,简化程序,strlen,进制转换
- 数制转换问题:确定进制
- 百练_2972确定数制进制转换
- 百炼-2972-确定进制-C语言-数制转换
- 确定进制
- POJ1331确定进制
- 确定进制
- 确定进制
- 确定进制
- 【poj1331】确定进制
- 确定进制
- 进制转换程序
- 简单LinuxC程序关于进制转换(递归函数)
- Q15
- 关于dsp中程序定点数和浮点数转换问题(Q15格式)
- 进制转换函数
- 进制转换函数
- 进制转换函数
- Html代码中table跨2行和跨2列的用法
- GDT是如何切换的
- 学生类
- gcc编译C++程序
- 【转】托管代码
- Q15—确定进制 函数,简化程序,strlen,进制转换
- hdu 2045 不容易系列之(3)—— LELE的RPG难题
- axis2-发布服务的操作
- 矩阵转址的一般算法
- java json对象转换数组
- hdu4520(小Q系列故事——最佳裁判)
- android 浏览器 app层,framework层,webkit层消息的交互
- Example
- hive大数据倾斜总结