• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

题目:将一个长度最多为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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
蓝桥杯B组省赛历年考题C/C++————2014年发布时间:2022-07-13
下一篇:
C#直接打开计算器或记事本发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap