首页 > 学院 > 开发设计 > 正文

进制转换

2019-11-08 18:37:01
字体:
来源:转载
供稿:网友

进制转换


题目来源: 9度 1118

代码

#include <stdio.h>#include <stdlib.h>#include <string.h> //注意:string要加上.husing 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语句括号内,会编译错误。可以利用字符串表示不同进制的整数。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表