UVA 389 Basically Speaking

来源:互联网 发布:js判断身份证号18位 编辑:程序博客网 时间:2024/04/28 18:40

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<cstdio>

#include<iostream>

#include<math.h>

using namespacestd;

int main(){

    char a[7];

 //   for(int i = 0; i < 7; i++) a[i] = 1;

    int b,c;

    b = c = 0;

    int sum =0;

    while(scanf("%s %d %d",a,&b,&c)!=EOF){

    

    /*    int i = 0;

        while(a[i] == '0') ++i;

        int t = i;

        int length = strlen(a);

                for(int j = t ; j  < length; ++j ) {

                    int zhishu;

                    if(a[j] >= '0' && a[j] <= '9'){

                         zhishu = a[j] - '0';

                    }else zhishu = a[j] - '0' - 7;

               

                    int l;

                    if(t != 0) l = pow(b,length - j - t);

                        else l = pow(b,length - j - t - 1);

                    sum += zhishu*l;

    */

        sum = strtol(a,NULL, b);

        if(sum ==0)cout <<"      0" <<endl ;

            else{

        //已经全转成了十进制

        char m[7] = {0};

        for(int i =0; i !=7; ++i) {

            int temp = sum % c;

            if(temp >=10){

                char n;

                n = temp + 55;

                m[6-i] = n;

            }

            else m[6-i] = temp +48 ;

            sum /= c;

    }//转换成对应进制

        if(sum !=0)cout <<"  ERROR" <<endl;

        else {

            int i , j;

            i = j = 0;

            while(m[j]=='0') {++j;cout <<" ";}

            

            for(int i = j; i <7; i++){

                cout << m[i];

            }

            cout <<endl;

        }

    }

  }

    return0;

}


1.遇到任意进制的字符串格式转10进制,可以直接使用strtol(字符串,null,原进制)

2.多次wa因为没有考虑到00000000 的现实情况,应该把它也作为极端情况之一

3.十进制转任意进制关键 先取余数 再除 如果大于10 就用 temp - 10 + 'A'

4.可以通过这个实现打印的字符长度为7的效果,

printf("%7s\n","ERROR");

printf("%7s\n","0");

printf("%7s\n",output);




0 0