#include <bits/stdc++.h> using namespace std; int main() { int a,c,d; char b[200]; scanf("%d.",&a); scanf("%[^e]%ne%d",b,&c,&d); if(b[0]=='0'&&c==1&&d==0) printf("%d",a); else if(d>=c) printf("%d%s%.*d",a,b,d-c,0); else printf("%d%.*s.%s",a,d,b,b+d); return 0; }
这个科学记数法的代码真的简洁。。。 可以计算 2.(100 位)e(0<=&&<=100)
%[^e]代表读入字符至e停止 23wsase->23wsas
%[e]代表只读入e 遇到非e停止 如2eee3 -> 空 eee22e3-> eee
%n就是在本scanf里到%n之前一共读入的字符个数
%*代表的是输入但不存储 吃掉某些东西
e或者任意字符 代表匹配
22es30 读入两个整型可以用%des%d
%*.* 第一个*代表宽度 第二个*代表精度
举个栗子
printf("%.*s\n", 1, "abc"); // 输出a
printf("%.*s\n", 2, "abc"); // 输出ab
printf("%.*s\n", 3, "abc"); // 输出abc >3是一样的效果 因为输出类型type = s,遇到'\0'会结束
printf("%.*s\n", 100, "abc"); //输入abc