• 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
  • 相关阅读:
    第9章 线程编程(7)_线程同步4:信号量
    第9章 线程编程(6)_线程同步3:条件变量
    第9章 线程编程(5)_线程同步2:读写锁
    第9章 线程编程(4)_线程同步1:互斥锁
    第9章 线程编程(3)_线程清理和控制函数
    第9章 线程编程(2)_线程创建和终止
    第9章 线程编程(1)_线程概念和线程标识
    第8章 信号(6)_贯穿案例2:mini shell(3)
    第8章 信号(5)_信号集和信号屏蔽
    第8章 信号(4)_中断的系统调用和函数可重入性
  • 原文地址:https://www.cnblogs.com/lyxcode/p/11108879.html
Copyright © 2020-2023  润新知