在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
题目:将一个长度最多为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;
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论