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\n",charNumber);
73     for(int i=0;i<size;i++){
74         printf("int array:%d\n",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("\n"); 90 return 0; 91 } 92 93

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM