1024 科学计数法
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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
printf("%c", *p ? *p : '0'); 注意*p是字符指针, 所以是'0', 不是0
scanf的正则表达式, []内是匹配的字符,^表示求反集,当遇到非集合内的字符时立即终止输入
scanf("%[^]"),和scanf("%s")的区别是:前者在读字符串的时候在遇到^符号后面的字符时候停止(不会读入那个终止符),而后者在遇到空白,换行时候终止
还要注意s数组不要开的太小, 不然会有一个测试点WA。
#include <stdio.h> int main() { char s[1000000]; int n; scanf("%[^E]E%d", s, &n); char *p = s; if(*p == '-') // 底数 { printf("-"); } p ++; if(n >= 0) // 指数 { printf("%c", *p); p ++; p ++; for(; n > 0; n--) { printf("%c", *p ? *p : '0'); p ++; } if(*p) { printf("."); while(*p) { printf("%c", *p); p ++; } } } else { printf("0."); for(n ++; n < 0; n ++) { printf("0"); } while(*p) { if(*p != '.') { printf("%c", *p); } p ++; } } // printf("%s %d", s, n); return 0; }
关于scanf的正则表达式, 我参考了http://blog.chinaunix.net/uid-7210505-id-3200150.html
#include <cstdio> int main() { /* 1. width 宽度,一般可以忽略,用法如: */ // char buf[10] = {0}; // scanf("%5s", buf); //%5s,只取个字符 // printf("%s\n", buf); /* 2. 正则表达式 %*[width] [{h | l | I64 | L}]type 前面带“*”号表示不保存变量。跳过符合条件的字符串 */ // char szTmp[10] = {0}; // scanf("%*s%s", szTmp); //%*s表示第一个匹配到的%s被过滤掉 // printf("%s\n", szTmp); /* 3. %[ ]表示要读入一个字符集合, 如果“[”后面第一个字符是“^”,则表示取反的意思, 即求“[]”内字符集的补集。“[]”内的字符串可以是1或更多字符组成。 空字符集(%[])是违反规定的,可导致不可预知的结果。 %[^] 也是违反规定的。 % [a-z] 读取在a-z之间的字符串 */ // char szTmp[10] = {0}; // scanf("%[^ ]", szTmp); //%[^ ]表示取遇到空格为止的字符串 // printf("%s\n", szTmp); char szTmp[10] = {0}; scanf("%*[^@]@%[^\.]", szTmp); //匹配从"@"到"."之间的字符 printf("%s\n", szTmp); /* 解释:“%*[^@]”表示滤掉“@”前的字符串, 接下来的一个“@”表示耗掉一个“@”但不保存到变量中, 大家可以将第二个“@”去掉试一试,输出结果 为“@gmail”, 后面的%[^\.]匹配到“.”之前的字符,由于“.”是正则表达式的元字符,因此加了“\”来转义。 */ return 0; } /* sample input(1, 2, 3): hello, world! output1: hello output2: world! output3: hello, sample input4: teacherhu@gmail.com output4: gmail */