1024 科学计数法 (20 分)
题目链接
算法分析
分为以下几个部分:
1.最开头的符号,即为结果的符号
2.读入数字,用bl标记,如果是底数,存到cr数组里,如果是指数,存到num数组里。
3.向左平移还是向右平移,用place记录这个符号的下标。
4.按要求输出(注意保留原精度)
代码实现
#include<bits/stdc++.h>
#include<string>
using namespace std;
#define N 10005
char cr[N];
int num[10];//存下指数的栈
int t1, t2;
int place;//存下第二个符号的位置
int cal(){//把指数字符串转化为整数
int wei = 1;
int sum = 0;
for(int i = t2; i >= 1; -- i){
sum += num[i] * wei;
wei *= 10;
}
return sum;
}
int main(){
string a;
bool bl = 1;
cin>> a;
int len = a.size();
for(int i = 0; i < len; ++ i){
if(i == 0){
if(a[i] == '+') continue;
else{
cout<< '-';
continue;
}
}
if(bl){
if(isdigit(a[i])){
cr[++ t1] = a[i];
continue;
}
else if(a[i] == '.') continue;
else{
bl = 0;
place = i + 1;
i ++;
continue;
}
}
else{
num[++ t2] = a[i] - '0';
}
}
//输出结果
int mov = cal();
if(a[place] == '+'){
int cl = 0;//记录小数点平移的位数
for(int i = 1; i <= t1; ++ i){
if(i > 1) cl ++;
if(cl > mov) cout<< '.';
cout<< cr[i];
}
for(int i = cl + 1; i <= mov; ++ i)
cout<< '0';
}
else{
for(int i = 1; i <= mov; ++ i){
cout<< '0';
if(i == 1) cout<< '.';
}
for(int i = 1; i <= t1; ++ i)
cout<< cr[i];
}
return 0;
}