您的位置:首页 > 编程语言

ZOJ Problem Set - 1334 Basically Speaking ac代码及总结

2013-10-04 20:52 260 查看
这道题目不难,是一道简单的进制转换问题,但是发现了自己两个遗漏的知识点:

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进制然后取余得到每一位,至于怎样把其它进制转换到十进制,见上面代码(是个基本问题不多解释了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: