1073. Scientific Notation (20)

题目地址:http://www.patest.cn/contests/pat-a-practise/1073

字符串处理, 但是如果想错了,就会写很多,并且思路较乱,下面是参考着写的,需要反复思考和练习

#include <cstdio> 
#include <sstream> 
#include <cstring> 

using namespace std;

char sign, tmpe, dir, zheng[10001], xiao[10001];
int a, ex;
stringstream strin;

void solve_1()
{
    int i;
    printf("0.");
    for (i = 0; i < ex - 1; ++i){
        printf("0");
    }
    printf("%d", a);
    printf("%s\n", zheng);
}

void solve_2()
{
    int i, len;
    len = strlen(zheng);
    printf("%d", a);
    if (len <= ex)
    {
        printf("%s", zheng);
        for (i = 0; i < ex - len; ++i)printf("0");
        printf("\n");
    }
    else{
        for (i = 0; i < ex; ++i){
            printf("%c", zheng[i]);
        }
        printf(".");
        printf("%s\n", zheng + ex);
    }
}

int main()
{
    //freopen("in", "r", stdin);
    // scanf()扫描集遇到'E'停止  zheng用来接收字符串, tmpe 用来接收字符'E'
    scanf("%c%d.%[^E]%c%c%s", &sign, &a, zheng, &tmpe, &dir, xiao);
    //printf("%c %d %s %c %c %s\n",sign,a,zheng,ch,dir,xiao);  
    if (sign == '-')
        printf("-");
    strin << xiao;
    strin >> ex;

    // 根据指数的 , 分三种情况讨论

    if (ex == 0) // 指数为0 直接输出结果
    {
        printf("%d.", a);
        printf("%s\n", zheng);
        return 0;
    }
    if (dir == '-') // 指数是负数 则一定是 0.xx a zheng
    {
        //solve_1();
        printf("0.");
        for (int i = 0; i < ex-1; i++)
        {
            printf("0");
        }
        printf("%d",a); // 不要忘了打印a 
        int len = strlen(zheng);
        for (int i = 0; i < len; i++)
        {
            printf("%c", zheng[i]);
        }
    }
    else // 指数是正的 则 zheng偏移   zhengd len 要与ex比较
    {
        //solve_2();
        int len = strlen(zheng);
        printf("%d", a);
        if (len <= ex) // 后面需要填充0
        {
            for (int i = 0; i < len; i++)
            {
                printf("%c", zheng[i]);
            }
            for (int i = len; i < ex; i++)
            {
                printf("0");
            }
            printf("\n");
        }
        else{
            for (int i = 0; i < ex; i++)
            {
                printf("%c", zheng[i]);
            }
            printf("."); // 需要这个小数点
            for (int i = ex; i < len; i++)
            {
                printf("%c", zheng[i]);
            }
        }
    }
    return 0;
}

你可能感兴趣的:(1073. Scientific Notation (20))