进制转换
- 题目来源:
9度 1118
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //注意:string要加上.h
using namespace std;
int main() {
int a,b;
char n[101];
while (scanf("%d%s%d", &a, n, &b)!=EOF) {
long sum = 0;
int c = 1; //注意权值的使用
int len = strlen(n);
for (int i=len-1; i>=0; i--) { //注意用法
int temp = 0;
if (n[i]>='0'&&n[i]<='9') {
temp = n[i]-'0';
}
if (n[i]>='a'&&n[i]<='f') {
temp = n[i]-'a'+10;
}
if (n[i]>='A'&&n[i]<='F') {
temp = n[i]-'A'+10;
}
sum = sum+temp*c;
c = c*a; //权值会随着指针变化
}
char ans[101]=""; //注意:不能用char ans[101];因为在循环过程中,当上一次的ans的长度大于本次时,那么多出的部分将依然保留
int i=0;
do{
int t = sum%b;
if (t>=0&&t<=9) {
ans[i++] = t+'0';
}
if (t>=10&&t<=15) {
ans[i++] = t-10+'A';
}
sum /= b;
}while (sum!=0);
int ans_len = strlen(ans);
for (int j=ans_len-1; j>=0; j--) {
printf("%c", ans[j]);
}
printf("\n");
}
return 0;
}
注意点:
- 使用strlen时,要包含头文件< string.h>而不是< string>
- char ans[101]=”“;而不使用char ans[101];见下;
- 当循环使用第二次的输入(15 Aab3 15)计算时,int ans_len = strlen(ans);计算的值还是上一次(15 Aab3 2)时的长度,所以会把上一次的如图所示的红线中的数字在下一次显示出来。
- 另外:strlen最好不要在for(int i=strlen(str)-1;i>=0;i–)中使用,最好放到for语句的外面;在9度中,放在for语句括号内,会编译错误。
- 可以利用字符串表示不同进制的整数。