C语言存30位数字长的十进制方法

题目:将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

首先:

1,30位数字的十进制,并没有一个数据类型可以存下30位的整数类型数字,所以考虑用字符串存储这个数据,遍历这个字符串,每个数获取就是字符的值减去30(‘0’)

2,30位的整数数字转化为二进制更加的长,所以也用十进制输出

3,输出的时候,用栈的思想进行输出

下面是我的代码,因为学习不久,完全按照栈的方法进行使用,以后要学会灵活运用思想:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<ctype.h>
 4 #include<string.h>
 5 #define STACK_INIT_SIZE 100
 6 #define STACK_INCRECEMENT 10
 7  
 8 typedef struct{
 9     int *top;
10     int *base;
11     int stacksize;
12 }Stack;
13  
14 int Stack_init(Stack *s){
15     s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
16     if(s->base==NULL){
17         return 0;
18     }
19     s->top=s->base;
20     s->stacksize=STACK_INIT_SIZE;
21     return 1;
22 }
23 int Push(Stack *s,int element){
24  
25     if(s->top-s->base>=s->stacksize){
26         s->base=(int *)realloc(s->base,(s->stacksize+STACK_INCRECEMENT)*sizeof(int));
27         if(s->base==NULL)
28             exit (0);
29         s->top=s->base+s->stacksize;
30         s->stacksize+=STACK_INCRECEMENT;
31     }
32     *(s->top)=element;
33     *(s->top)++;
34     return 1;
35 }
36  
37 int Pop(Stack *s,int* element){
38  
39     if(s->base==s->top){
40         return 0;
41     }
42     *element=*--(s->top);
43     return 1;
44 }
45   
46 bool judgeFinal(int number[],int size){
47     for(int i=0;i<size;i++){
48         if(number[i]!=0){
49             return false;
50         }
51     }
52     return true;
53 }
54  
55 int main(){
56  
57     Stack s;
58     int initResult=Stack_init(&s);
59     if(initResult==0){
60         printf("Stack Init Fail!!");
61     }
62     int intNum[30];
63     char charNumber[30];
64     int number=0;
65  
66     scanf("%s",charNumber);
67     int size=strlen(charNumber);
68     while(number<size){
69         intNum[number]=charNumber[number]-'0';
70         number++;
71     }
72     /*printf("Input number is:%s
",charNumber);
73     for(int i=0;i<size;i++){
74         printf("int array:%d
",intNum[i]);
75     }*/
76     while(!judgeFinal(intNum,size)){
77         int remain=0;
        //获得二进制的过程 78 for(int k=0;k<size;k++){ 79 int tempRemain=(intNum[k]+10*remain)%2; 80 intNum[k]=(intNum[k]+10*remain)/2; 81 remain=tempRemain; 82 } 83 Push(&s,remain); 84 }
85 int tempNum; 86 while(Pop(&s,&tempNum)){ 87 printf("%d",tempNum); 88 } 89 printf(" "); 90 return 0; 91 } 92 93
原文地址:https://www.cnblogs.com/lyxcode/p/11108879.html