题目地址: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;
}