C语言存30位数字长的十进制方法
2024-09-05 07:37:18
题目:将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
首先:
1,30位数字的十进制,并没有一个数据类型可以存下30位的整数类型数字,所以考虑用字符串存储这个数据,遍历这个字符串,每个数获取就是字符的值减去30(‘0’)
2,30位的整数数字转化为二进制更加的长,所以也用十进制输出
3,输出的时候,用栈的思想进行输出
下面是我的代码,因为学习不久,完全按照栈的方法进行使用,以后要学会灵活运用思想:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define STACK_INIT_SIZE 100
#define STACK_INCRECEMENT 10 typedef struct{
int *top;
int *base;
int stacksize;
}Stack; int Stack_init(Stack *s){
s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(s->base==NULL){
return ;
}
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return ;
}
int Push(Stack *s,int element){ if(s->top-s->base>=s->stacksize){
s->base=(int *)realloc(s->base,(s->stacksize+STACK_INCRECEMENT)*sizeof(int));
if(s->base==NULL)
exit ();
s->top=s->base+s->stacksize;
s->stacksize+=STACK_INCRECEMENT;
}
*(s->top)=element;
*(s->top)++;
return ;
} int Pop(Stack *s,int* element){ if(s->base==s->top){
return ;
}
*element=*--(s->top);
return ;
} bool judgeFinal(int number[],int size){
for(int i=;i<size;i++){
if(number[i]!=){
return false;
}
}
return true;
} int main(){ Stack s;
int initResult=Stack_init(&s);
if(initResult==){
printf("Stack Init Fail!!");
}
int intNum[];
char charNumber[];
int number=; scanf("%s",charNumber);
int size=strlen(charNumber);
while(number<size){
intNum[number]=charNumber[number]-'';
number++;
}
/*printf("Input number is:%s\n",charNumber);
for(int i=0;i<size;i++){
printf("int array:%d\n",intNum[i]);
}*/
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 }
int tempNum;
while(Pop(&s,&tempNum)){
printf("%d",tempNum);
}
printf("\n");
return ;
}
最新文章
- NOIP2009多项式输出(水)【A004】
- Linear Algebra lecture9 note
- C#实现队列
- wcf长连接
- Android studio 安装,JDK 出错解决方案
- 一道javascript面试题(闭包与函数柯里化)
- python pip 安装库文件报错:pip install ImportError: No module named _internal
- iOS UIDatePicker设置为中文的方法
- python笔记14-三元运算符
- Mac 下 Java 多版本切换
- python中关于round函数的小坑
- 设置shell脚本静默方式输入密码方法
- odroid xu4
- CSS currentColor研究
- 【LOJ】 #2308. 「APIO2017」商旅
- Hyperledger Fabric服务器配置及修改Docker容器卷宗存储根目录/位置
- Chapter 1 概述
- iPhone手机屏幕的尺寸180330更新
- X86 寻址方式、AT&;T 汇编语言相关知识、AT&;T 与 Intel 汇编语言的比较、gcc 嵌入式汇编
- 关于beginPath()和closePath()的关系>;>;canvas的beginPath和closePath分析总结,包括多段弧的情况
热门文章
- Maven:禁止编码指定类型的资源文件
- plus.zip.compressImage 压缩报错{";code";:-5,";message";:";输出图片失败";}
- Winform 工程反编译后窗体如何显示
- Maven IntelliJ
- 增加github访问速度
- c++后台开发面试常见知识点总结(一)c++基础
- Mysql——索引相关
- iOS-reveal 的使用
- 【ARM-Linux开发】cmem模块/DVSDK2.0
- Linux ps 查看进程