您的位置:首页 > 其它

UVA 389 Basically Speaking

2017-03-02 17:21 225 查看
#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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多次wa