PATB1024:科学记数法
【思路】:
输出的字符串由几部分组成 通过 i str[i] 来索引输出字符串
每部分 需要满足什么条件 才输出
常用的是 str[i] pos pos-3 表示长度 exp为字符–》转换成数字
【知识点】
每部分 需要满足什么条件 才输出
for (int i = 1; i < pos; i++)//也是分成3 部分 思考每部分满足什么条件是输出什么
{
if (str[i] == '.')
{
continue;
}
cout << str[i];
if (i== exp +2 && pos-3 > exp ) //i== exp +2为放小数点的位置 pos-3数字个数要比 指数部分位数要大
{
cout << ".";
}
}
跳过循环countine
for (int i = 1; i < pos; i++)
{
if (str[i] == '.')
{
continue;
}
cout << str[i];
}
* exp为字符–》转换成数字*
for (int i = pos + 2; i < strlen(str); i++)
{
exp = exp * 10 + str[i] -'0';
}
【知识点】
找到特定字符的位置索引
for (int i = 0; i < strlen(str); i++)
{
if (str[i] == 'E')
{
pos = i;
break;//及时退出
}
}
【参考答案】
//科学计数法
//给定字符串 按照要求输入字符 和计算控制说得。对于字符串主要是 长度是多少 循环多少次 该字符的位置是什么。等等 此处应该有总结。
void B1024(){
char str[10100];
cin >> str;
int pos,exp=0;
///找到E的位置 pos-3是个数
for (int i = 0; i < strlen(str); i++)
{
if (str[i] == 'E')
{
pos = i;
break;//及时退出
}
}
//将指数的字符转换成数字
for (int i = pos + 2; i < strlen(str); i++)
{
if (str[0] == '-'){
cout << '-';
}
//输出exp = exp * 10 + str[i] -'0';
}
if (str[pos+1] == '-') //分成三部分 思考这个字符串 应该分成几部分 每部分由那些字符生成
{
cout << "0.";
for (int i = 0; i < exp-1; i++)
{
cout << '0';
}
for (int i = 1; i < pos; i++)
{
if (str[i] == '.')
{
continue;
}
cout << str[i];
}
}
else{
for (int i = 1; i < pos; i++)//也是分成3 部分 思考每部分满足什么条件是输出什么
{
if (str[i] == '.')
{
continue;
}
cout << str[i];
if (i== exp +2 && pos-3 > exp ) //i== exp +2为放小数点的位置
{
cout << ".";
}
}
for (int i = 0; i < exp -(pos-3); i++)
{
cout << "0";
}
}
}