ZOJ Problem Set - 1334 Basically Speaking ac代码及总结
这道题目不难,是一道简单的进制转换问题,但是发现了自己两个遗漏的知识点:
1.关于scanf
(1)scanf函数在输入时是以回车或者空格作为一次输入的结束
(2)scanf函数在输入字符串的过程中是不吸纳空格的,而且如果输入是整数或者浮点数,前面的空格对输入没有影响,如下:
char s1[100],s2[100]; int a,b; scanf("%s%s%d%d",s1,s2,a,b); printf("%s%s%d%d",s1,s2);
如上面这段代码,如果给定输入为:" ACM ACM 1 2 "
则输出为:"ACMACM12"
2.关于gets
(1)gets函数是可以吸纳空格的
(2)如果利用gets读取文件中的字符串,可以利用如下代码作为结束:
while(gets(str)!=NULL) {}
3.关于reverse函数,特别标注下,以前用过后来忘掉了,在algorithm中
下面是ac代码
#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <algorithm> using namespace std; int main() { char src[100]; int base1,base2; while(scanf("%s%d%d",src,&base1,&base2)!=EOF) { int i,len=strlen(src),sum=0; for(i=0;i<len;i++) { if(src[i]>='0'&&src[i]<='9') sum=sum*base1+src[i]-'0'; else sum=sum*base1+src[i]-55; } i=0; while(sum) { int t=sum%base2; if(t<10) src[i++]=t+'0'; else src[i++]=t+55; sum/=base2; } if(i>7) printf(" ERROR\n"); else { while(i<7) { src[i++]=' '; } reverse(src,src+i); src[i]='\0'; printf("%s\n",src); } } return 0; }
关于进制转换的方法:统一转换为10进制然后取余得到每一位,至于怎样把其它进制转换到十进制,见上面代码(是个基本问题不多解释了)