C语言存30位数字长的十进制方法
题目:将一个长度最多为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 ;
}
C语言存30位数字长的十进制方法的更多相关文章
- C语言:其他进制转换为十进制(方法二)
#include<stdio.h> #include<math.h> #include<string.h> #include<ctype.h> //其他 ...
- c# 求第30位数的值
1,1,2,3,5,8,13,21,34,55.... 求第30位数的值: 递归方法: class Program { static void Main(string[] args) { //找规律: ...
- 30分钟入门Java8之方法引用
30分钟入门Java8之方法引用 前言 之前两篇文章分别介绍了Java8的lambda表达式和默认方法和静态接口方法.今天我们继续学习Java8的新语言特性--方法引用(Method Referenc ...
- C语言使用cmd命令并获取输出方法
转自http://blog.csdn.net/hxh129/article/details/8000205 C语言使用cmd命令并获取输出方法 在实践中,我们有时候需要用C语言来调用cmd的命令,并得 ...
- C语言清空输入缓冲区的N种方法对比
转自C语言清空输入缓冲区的N种方法对比 C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int get ...
- 苹果新的编程语言 Swift 语言进阶(九)--方法和下标
一.方法 方法是与特定类型相关的函数.与属性一样,方法也包括实例方法和类型方法. 类.结构.枚举都能定义实例方法,用来封装或实现给定类型的一个实例相关的功能或特定任务. 类.结构.枚举也能定义与类型本 ...
- Maximum execution time of 30 seconds exceeded解决错误方法
Maximum execution time of 30 seconds exceeded解决错误方法Fatal error: Maximum execution time of 30 seconds ...
- R语言中样本平衡的几种方法
R语言中样本平衡的几种方法 在对不平衡的分类数据集进行建模时,机器学习算法可能并不稳定,其预测结果甚至可能是有偏的,而预测精度此时也变得带有误导性.在不平衡的数据中,任一算法都没法从样本量少的类中获取 ...
- R语言—如何安装Github包的解决方法,亲测有效
R语言—如何安装Github包的解决方法,亲测有效 准备安装材料: R包-REmap GitHub下载地址:https://github.com/lchiffon/REmap R包-baidumap ...
随机推荐
- 转:C++何时调用构造函数,何时调用析构函数
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/wjf1997/article/detai ...
- Java同步数据结构之LinkedBlockingDeque
前言 前面介绍完了队列Queue/BlockingQueue的实现类,接下来介绍双端队列Deque/BlockingDeque的实现类之一LinkedBlockingDeque,它是一种基于链表的可选 ...
- pandas总结
### 一.创建对象 # 1.可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引: # s=pd.Series([1,3,5,np.nan,6,8]) # print ...
- ES6深入浅出-1 新版变量声明:let 和 const-2.视频 let和const
以前的var方式声明不好用 a=1回声明一个全局变量, 输出了1 说明a=1确实声明了一个全局变量. 但是你把放在其他的地方,就不是声明全局变量了. 如果外面有个全局变量a 那么函数里面就是给a赋值 ...
- [C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法)
1 Dijkstra算法 1.1 算法基本信息 解决问题/提出背景 单源最短路径(在带权有向图中,求从某顶点到其余各顶点的最短路径) 算法思想 贪心算法 按路径长度递增的次序,依次产生最短路径的算法 ...
- python如何发布自已pip项目
python如何发布自已pip项目前言因为自已平时会把一个常用到逻辑写成一个工具python脚本,像关于时间字符串处理,像关于路径和文件夹遍历什么的工具.每一次新建一个项目的时候都要把这些工具程序复制 ...
- 微信小程序的场景值scene
根据微信小程序返回给我们的场景值,我们可以根据不同的场景做出不同的处理,更加方便我们对使用场景的划分 当前支持的场景值有: :发现栏小程序主入口,“最近使用”列表(基础库2..4版本起将包含“我的小程 ...
- JAVA数据结构和算法 2-数组
数组中使用的主要算法:插入.查找(线性查找-无序/二分查找-有序).删除 在JAVA中数组属于对象类型: 1.创建方法有3种: 或者 数组一旦创建,大小不可改变.数组大小可以通过length字段获得: ...
- (4)Linux命令分类汇总(13~16)
Linux命令分类汇总(13~16) (十三)系统管理与性能监视命令(9个) 79 chkconfig 管理Linux系统开机启动项. 80 vmstat 虚拟内存统计. 81 ...
- Centos6.5搭建方法
# VSFTP # ## ###安装 vsftp yum install vsftpd* -y ###启动服务 /etc/init.d/vsftpd restart ###配置 ...