An_Eon An_Eon
关注数: 105 粉丝数: 89 发帖数: 3,257 关注贴吧数: 32
谁能帮我分析下这个程序 #include<stdio.h> #include<math.h> #include <stdlib.h> struct stack { int data[100]; int n; }; void INIT(stack &s) { s.n = 0; } void PUSH(stack &s, int e) { s.data[s.n++] = e; } int POP(stack &s) { return s.data[--s.n]; } void f1(int m, int n) { stack s; INIT(s); int e; while(m) { PUSH(s, m%n); m /= n; } while(s.n) { e = POP(s); if(n<10) printf("%d", e); else e>=10? printf("%c", char(e-10+'A')) : printf("%d", e); } } void f2(double m, int n) { while(m) { if(n<10) printf("%d", int(m*n)); else m*n>=10? printf("%c", char(int(m*n)-10+'A')) : printf("%d", int(m*n)); m = m*n - int(m*n); } } void f(double m, int n) { f1(int(m), n); if(int(m) == m) return; putchar('.'); m -= int(m); f2(m, n); } void f10(char c[], double m) { printf(" %s 转换成 2进制 = ", c); f(m, 2); putchar('\n'); printf(" %s 转换成 8进制 = ", c); f(m, 8); putchar('\n'); printf(" %s 转换成16进制 = ", c); f(m,16); putchar('\n'); } double fn_10(char c[], int n) { char z[100]; int i = 0, j; double b = 0; printf(" %s 转换成10进制 = ", c); while(*c != '.' && *c != '\0') z[i++] = *c++; i--; if(*c == '\0') c--; for(j = 0; j <= i; j++) if(z[j] < 65) b += (z[j]-48) * pow(n,i-j); else b += (z[j]-55) * pow(n,i-j); for(c++, j = -1; *c != '\0' ; c++, j--) if(*c < 65) b += (*c-48) * pow(n,j); else b += (*c-55) * pow(n,j); printf("%g\n", b); return b; } int main() { puts("进制转换"); char c[100]; int n; printf("\n 输入一数与它的进制: "); scanf("%s%d", c, &n); putchar('\n'); f10(c, fn_10(c,n)); system("pause"); }
首页 1 2 3 下一页