进制转换

来源:互联网 发布:解决json包含html标签 编辑:程序博客网 时间:2024/06/06 02:47

进制转换


  • 题目来源:
    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语句括号内,会编译错误。
  • 可以利用字符串表示不同进制的整数。
0 0
原创粉丝点击