题目概述:
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]”.”[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。
现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。
输入格式:
每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。
输出格式:
对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。
输入样例1:
+1.23400E-03
输出样例1:
0.00123400
输入样例2:
-1.2E+10
输出样例2:
-12000000000
思路:
很有意思的一个题目,让我们完成一个解析科学计数法的小功能。
读取的时候用到了一种格式化字符串%[^…],这和%s类似,不过会终止于[^]里面的字符,而不是空白字符,利用这个可以简单的读取’E’前后的两个数。
解析时考虑三种情况:
指数大于(等于)0,
指数大于(等于)小数位数,末尾补0,不输出小数点,
指数小于小数位数,要在中间输出小数点,
指数小于0,在前面补0,小数点前移至第一个0后面。
作者:OliverLew
链接:https://www.jianshu.com/p/ba0282bb87a0
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
#include<stdio.h>
#include<string.h>
char line[10000], *p = line;
int exponent; //指数
int t = 0;
int main() {
scanf("%[^E]E%d", line, &exponent);
if (*p++ == '-')
printf("-");
if (exponent >= 0) {
putchar(*p);
for (p += 2;exponent;exponent--) {
putchar(*p ? *p++ : '0');
}
if (*p) {
putchar('.');
while (*p)
putchar(*p++);
}
}
if (exponent < 0) {
printf("0.");
for (exponent++;exponent;exponent++)
putchar('0');
for (;*p;p++)
if (*p != '.')
putchar(*p);
}
return 0;
}
做到20多题,最大的感受就是很多题目其实意思是懂得,可是就是不知道怎么开始编程,可能是思维不好吧,但看了别人的代码以后还是学了点新东西和新技巧,也希望自己在不断的坚持之下可以慢慢培养到一些逻辑思维和代码思维,帮助日后的学习。