-
Notifications
You must be signed in to change notification settings - Fork 0
/
text4-2.c
89 lines (82 loc) · 1.62 KB
/
text4-2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*************************************************************************
> File Name: Demo.c
> Author:
> Mail:
> Created Time: 2015年10月30日 星期五 21时50分07秒
************************************************************************/
#include<stdio.h>
#include<ctype.h>
#define MAXLINE 100
double factorial(int base,int n)
{
int i;
double result;
result=1.0;
if(n>0)
{
for(i=0;i<n;i++)
{
result*=base;
}
}else if(n<0){
for(i=0;i>n;i--)
{
result/=base;
}
}else
;
return result;
}
double atof(char s[]){
double val,power;
int i,sign,nsign,n;
n=0;
for(i=0;isspace(s[i]);i++)
;
sign=(s[i]=='-')?-1:1;
if(s[i]=='+'||s[i]=='-')
i++;
for(val=0.0;isdigit(s[i]);i++)
val=10.0*val+(s[i]-'0');
if(s[i]=='.')
i++;
for(power=1.0;isdigit(s[i]);i++){
val=10.0*val+(s[i]-'0');
power*=10.0;
}
if(s[i]=='e')
{
i++;
nsign=(s[i]=='-')?-1:1;
while(isdigit(s[++i]))
{
n=n*10+(s[i]-'0');
}
return sign*val/power*factorial(10,n*nsign);
}
return sign*val/power;
}
int mygetline(char s[],int lim)
{
int c,i;
i=0;
while(--lim>0&&(c=getchar())!=EOF&&c!='\n')
{
s[i++]=c;
}
if(c=='\n')
{
s[i++]=c;
}
s[i]='\0';
return i;
}
/*简单计算器程序*/
main(){
double sum,atof(char []);
char line[MAXLINE];
sum = 0;
while (mygetline(line, MAXLINE)>0)
printf("\t%g\n",sum+=atof(line));
return 0;
}