UVA 389 Basically Speaking

#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);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值